单元测试不存在的数据库

时间:2016-09-26 06:55:13

标签: c# sql database unit-testing

我们有一个构建服务器,它的计算机上没有运行数据库。 现在我们要进行单元测试,这些测试也包括与SQL相关的任务,例如编写模拟数据并再次读取它们以验证输出(它在过程中被C#代码操纵)。

因此,常见的方法是为实际运行数据库的远程服务器提供连接字符串。 这是有效的,但它是不需要的,因为触发构建时数据库服务器可能无法访问,因此自动测试将失败

创建"伪数据库"的最佳方法是什么?在运行单元测试? 没有实际的数据库,这甚至可能吗?它甚至有意义吗?

2 个答案:

答案 0 :(得分:3)

使用Moq之类的模拟框架,检查here。这就是Mocking框架的确切目的,只有给定的组件可以进行单元测试,并且可以模拟任何类似数据库的集成,以便在运行时返回有效的预定义结果,从而确定给定代码/单元的工作< / p>

答案 1 :(得分:1)

普遍接受的答案&#34;我如何用外部依赖关系对单元进行单元测试&#34;是使用模拟层。

然而,这很快变得笨拙 - 你最终只是为了模仿数据库而编写和维护大量代码,并且不清楚这些代码是否会为自己付出代价。例如,如果您的SQL语句有拼写错误,那么您的单元测试就不会捕获它。

相反,将操作数据的代码分解为可以在没有数据库访问的情况下进行单元测试的层更好。