如何unit testing数据库依赖行为C#

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

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

SQLite Nunit&Fluent Nhibernate – 测试您的数据访问层

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

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

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

对于每个数据库表,可以使用简单的C#HashTable实现此内存数据库的表。

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

您应该使用模拟程序(插件),如:

犀牛嘲笑或moq

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

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

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