对不存在的数据库进行单元测试的最佳方法

本文关键字:单元测试 最佳 方法 不存在 数据库 | 更新日期: 2023-09-27 18:08:42

我们有一个构建服务器,它的机器上没有运行数据库。现在我们想做单元测试,它也涵盖sql相关的任务,例如编写模拟数据并再次读取它们以验证输出(它在过程中由c#代码操作)。

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

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

对不存在的数据库进行单元测试的最佳方法

使用像Moq这样的mock框架,查看这里。这就是mock框架的确切目的:只有给定的组件可以进行单元测试,任何集成(如数据库)都可以进行mock,以便在运行时返回有效的预定义结果,从而确定给定代码/unit

的工作情况。

对于"如何使用外部依赖进行单元测试",普遍接受的答案是使用模拟层。

然而,这很快就会变得笨拙——你最终要编写和维护大量的代码来模拟你的数据库,而且不清楚这些代码是否会为自己买单。例如,如果你的SQL语句有一个错别字,你的单元测试将无法捕捉到它。

相反,最好将操作数据的代码分解到一个可以在不访问数据库的情况下进行单元测试的层中。