相信我,我在这里阅读了很多关于 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/

10-12 12:36
查看更多