我应该使用内存数据库而不是模拟我的存储库吗?

时间:2010-01-30 14:06:52

标签: testing mocking

我喜欢在测试时使用内存数据库(如SQLite)而不是为我的存储库创建Mocks的想法。这样我也可以在没有任何性能问题的情况下测试我的存储库的代码。

这种策略的优点和缺点是什么?

4 个答案:

答案 0 :(得分:4)

如果我正在使用ORM,我通常倾向于在内存数据库中使用sqlite来测试我的应用程序,因为我没有设置模拟和预期结果的开销。使用虚拟数据库有一个速度提升,但我不认为它比使用模拟更快。如果我使用SQL适配器,我可能会使用模拟,否则,我可能不得不重写调用。

答案 1 :(得分:3)

我想说这两种策略是两回事。 正如您所说,使用内存中的数据库,您也可以测试您的存储库,但是,您必须首先测试您的存储库以实现关注点的分离。当您设计系统时,也许根据MVC,您需要在模型/存储库之前使用控制器,因为首先您必须决定您想要做什么,然后决定哪些实体将协同实现该目标。因此,首先创建控制器和模拟存储库是一种更好的方法,然后您可以使用内存数据库测试您的存储库(如果它很容易设置)。

答案 2 :(得分:2)

我的策略是在测试我的业务代码时,我模拟了我的存储库。在测试我的存储库时,我模拟了我的数据访问层。我尽可能地为我的数据访问层(LINQ-to-SQL)使用自动生成的代码,因此没有太多可以在那里进行测试。有什么(验证的东西,专门的财产处理),通常可以直接测试,没有模拟。如果绝对必要(或更容易),我有时会使用基于列表的自定义内存存储来伪装数据层 - 请参阅我在http://farm-fresh-code.blogspot.com上写的关于此内容的博客。

答案 3 :(得分:0)

使用内存为您提供了模拟所没有的优势。使用内存数据库,您可以轻松更改代码实现,而无需更改测试中的任何内容。例如,如果使用ORM,则可以使用insert方法将表单移动到bulkInsert方法,而不必模拟新添加的bulkInsert方法。