【发布时间】:2013-02-15 04:45:47
【问题描述】:
相信我,我已经阅读了很多关于 SO 的文章和问题。但我还没有找到满意的答案。 以Matt Robert's Tutorial上的repository模式和单元测试为例:
我不明白.. 两个存储库是否包含完全相同的查询逻辑?似乎是这样,如果是这样,那是一个有用的模式吗?这意味着每当我更改假存储库中的查询时,我都必须更改实际存储库中的查询逻辑——这听起来像是 PITA 和问题的配方。
我想将查询保留在 one 方法中并测试该方法。后来我想到,我可以这样做:
//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?
【问题讨论】:
-
好问题和好用户名(等不及第 13 本书了!)。 +1
-
@Brian 这本书已经出版了:P
-
呃...我的意思是第 14 本书,我看到 它 也已经出版了!
-
@Brian Yep,不幸的是,我正在与设计模式和测试作斗争以开始阅读:(但很快:P
-
我要说的是为你的存储库编写一个单元测试,然后将上下文最小化。然后我读了这个答案并意识到它并不那么简单 - stackoverflow.com/a/1894066/201648。但是,我认为该答案中的链接可能对您有用。
标签: c# entity-framework unit-testing repository-pattern