我应该嘲笑哪个对象?

时间:2008-09-26 21:46:44

标签: unit-testing mocking repository-pattern

我正在写repository。通过DAO获取对象。创建和更新对象是通过Request对象完成的,该对象被提供给RequestHandler对象(la Command pattern)。我没有编写DAO,Request或RequestHandler,所以我无法修改它们。

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

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

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

顺便说一句,我说“模拟”不是在NMock意义上,而是像假装内存集合伪造数据库。

2 个答案:

答案 0 :(得分:2)

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

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

在这两种情况下,我的意思是由一些模拟库创建的测试双精度(用于测试的假货,需要将某些东西返回到测试对象的存根,如果你真的需要,则进行模拟)。

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

答案 1 :(得分:0)

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