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

时间:2013-02-14 20:23:18

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

相信我,我在这里阅读了许多文章和问题。但我没有找到满意的答案。 以存储库模式和单元测试为例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?

1 个答案:

答案 0 :(得分:2)

没有太多可继续的,但我认为你的存储库模式存在缺陷。

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

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

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