我们在 EF 中使用 LINQ 来过滤数据(以优化查询)。然而,在测试我们的服务时,我们无法测试查询 - 那么我们是否应该在服务层也进行过滤?
如果您的数据层将获取的集合公开为
List<T>
,则意味着它会具体化内存中的所有数据。当您在服务层内应用过滤时,这意味着您执行客户端过滤,这远非最佳。除非您想多次重复使用数据层中的相同数据集合。
因此,如果您想优化查询速度,请在数据层内执行过滤逻辑。从测试的角度来看,如果您想对数据层功能执行单元测试,那么您可以使用实体框架模拟库。有些与 Moq 配合使用效果更好,有些则与 NSubstitute 配合使用效果更好。
对于集成测试,您可以使用 EF 的内存数据库提供程序,但请记住,它在许多情况下的行为与真实数据库不同。请阅读以下有关 EF 测试的文章。