c# - 测试 Linq 查询 EF 和存储库模式

标签 c# entity-framework unit-testing repository-pattern

相信我,我在这里阅读了很多关于 SO 的文章和问题。但是我还没有找到满意的答案。 取Matt Robert's Tutorial以存储库模式和单元测试为例:

我不明白.. 两个存储库是否包含完全相同的查询逻辑?它似乎是这样,如果是这样,那是一个有用的模式吗?这意味着每当我更改假存储库中的查询时,我都必须更改实际存储库中的查询逻辑——这听起来像是 PITA 和问题的解决方案。

我想将查询保留在一个 方法中并测试该方法。后来我想到,我可以这样做:

//Student can be from the db or a fake list
public person GetStudent(IEnumerable<Student> students,int studentid)
{
   return students.FirstOrDefault(s =>s.PersonId ==studentid);
}

//unit test
    Assert.IsNull(GetStudent(fakeStudentList, -1))
//actual code
    var student =  GetStudent(entities.students,-1) 

有模仿上面的模式吗?如果是这样,它是什么?或者实际上存储库模式是如何工作的?如果是这样,为什么感觉存储库模式重复代码?

还有,努力..看看这个可怕的 example :S?

最佳答案

没什么可继续的,但我认为您的存储库模式存在缺陷。

您不应将学生集合传递给 GetStudent()GetStudent 应该是内部了解学生列表的类的一部分 - 无论它是文件、List、数据库还是其他。

因此您的“假”存储库可能具有相同的逻辑,或者它可能只是返回一个硬编码的虚拟Student。如果您在伪造存储库,我认为这是因为您正在测试需要该存储库的其他东西,所以它不应该关心如何它获得了 Student

此外,您引用的文章只提到了一个存储库,所以我不确定您为什么需要复制它。

关于c# - 测试 Linq 查询 EF 和存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14883383/

相关文章:

c# - 用于发送邮件的通知服务实现

c# - DbContext的第三方实现,如何同时实现IdentityDbContext

java - 使用继承的 AssertJ usingComparatorForType 方法

c# - 来自数据库的数据未返回,但正常列表是

java - 用 mockito 测试一个方法,它使用其他类的一些实用方法

unit-testing - 仅当在 Symfony 2.8 中进行单元测试时,服务类中的 Twig_Environment 才会导致 DIC RuntimeExtension

c# - 代码契约(Contract) : Do we have to specify Contract. Requires(...) 语句在委托(delegate)方法中冗余?

c# - 如何通过 GPRS 向 GPS 追踪器(TK103、GT02、GT06、TK102 等)发送命令

c# - Google Vision API - 分析图像序列

asp.net-mvc - EF6 模型和 WebAPI 2.2 + OData 4.0 模型有什么关系?