如何单元测试数据库依赖行为C#

时间:2010-11-18 07:10:04

标签: c# database unit-testing


我有一个与DB通信的C#应用​​程序。我想测试一些依赖于DB的函数。所以我想确保DB在每次测试运行之前都有一个初始状态。我使用NUnit来测试我的应用程序。有哪些方法可以恢复DB的初始状态?
谢谢你的帮助!

5 个答案:

答案 0 :(得分:5)

您没有与数据库进行单元测试交互。这种类型的测试称为集成测试。您可以使用常用的测试工具(NUnit,MSTest等),但最好是在单独的项目中分离集成测试,使用专用的测试数据库,并在事务中运行这些测试(例如,使用{{3你回滚了。这可以确保数据不会发生变化,并且测试行为是可预测的,这非常重要。

如果可以的话,尝试设计您的应用程序,以便很容易伪造所有外部源(如数据库),以允许您运行(通常更快)单元测试。然而,这并不容易。特别是在处理尚未设计用于可测试性的现有应用程序时。在那种情况下,我发现集成测试是一种很好的开始方式。

答案 1 :(得分:3)

您可以在内存中使用SQLite数据库来创建测试数据库环境。

SQLite Nunit & Fluent Nhibernate - Test your data access layer

答案 2 :(得分:1)

正如其他人所说,你不能依赖于数据库及其在单元测试中的结构。 因此,我将创建一个接口,它将DB从使用它的组件(也称为DB抽象层)中隐藏,然后为了单元测试而实现内存数据库。

这个内存数据库的表可以使用每个数据库表的简单C#HashTable来实现。

这种分离还有一个好处,就是在代码之间创建一个可能会改变的代码(例如从MySQL迁移到Oracle等)与使用它的组件之间的分离。

答案 3 :(得分:0)

你应该使用像:

这样的模型程序(插件)

Rhino mocksmoq

这些程序可以在测试期间模拟数据库等数据源。

答案 4 :(得分:0)

考虑切换到MbUnit进行集成测试。它具有非常方便的 Rollback 属性,完全符合您的需求。

MbUnit具有与NUnit标记测试类和方法相同的属性。因此,您只需要更改using指令并引用MbUnit dll。