0

我正在写一个存储库。获取对象是通过 DAO 完成的。创建和更新对象是通过一个 Request 对象完成的,该对象被赋予一个 RequestHandler 对象(一个命令模式)。我没有编写 DAO、Request 或 RequestHandler,所以我无法修改它们。

我正在尝试为此存储库编写测试。我已经模拟了 DAO 和 RequestHandler。我的目标是让模拟的 RequestHandler 简单地将新的或更新的对象添加到模拟的 DAO。这将产生我正在与数据库交谈的错觉。这样,我不必为调用此存储库的所有类模拟存储库。

问题是 Request 对象是这个字符串 blob 和各种字母数字代码的 gob。我很确定 XML 也参与其中。这有点乱。另一位开发人员正在编写代码以根据所存储的对象创建 Request 对象。而且由于 RequestHandler 接收请求而不是我存储的对象,因此它无法更新模拟的 DAO。

所以问题是:我是否也要模拟请求,还是应该等到其他人,他有点慢,在我编写测试之前完成他的代码?或者在测试调用存储库的类时搞砸并模拟整个存储库?

顺便说一句,我说的“模拟”不是 NMock 意义上的,而是像用内存中的集合来伪造数据库一样。

4

2 回答 2

2

要测试存储库,我建议您对所有较低层对象使用测试替身。

要测试依赖于存储库的类,我建议您对存储库使用测试替身。

在这两种情况下,我的意思是由一些模拟库创建的测试替身(假货适用于测试,存根需要向被测对象返回一些东西,如果你真的需要模拟)。

如果您正在使用内存中的集合创建 DAO 的实现,以便在演示或测试系统中功能性地替换数据库,这与对上层的单元测试不同。我做过类似的事情,这样我就可以向人们提供原型并专注于业务对象而不是物理模型。不过,这不适用于单元测试。

于 2008-09-26T21:56:51.233 回答
0

您可能没有创建 Web 应用程序,但您可以查看使用 Repository 的 NerdDinner 应用程序。这是一个免费的 PDF,它解释了如何使用 ASP.NET MVC 创建应用程序,可以在这里找到:Professional ASP.NET MVC 2.0

于 2009-04-03T16:07:46.147 回答