如何在C#中为数据库数据进行集成测试?

时间:2013-03-19 14:10:07

标签: c# asp.net-mvc nunit integration-testing fluent-migrator

我最近一直在针对ASP.Net MVC控制器操作编写一些集成测试,并且由于难以设置需要存在的测试数据以便运行测试而感到沮丧。

例如,我想测试控制器的“添加”,“编辑”和“删除”操作。我可以编写“添加”测试,但后来发现编写“编辑”测试我要么必须调用“添加”测试的代码来创建一个记录,以便我可以编辑它,或者在测试类中做了很多设置,这些设置都没有特别吸引人。

理想情况下,我想使用或开发集成测试框架,以便以可重用的方式为集成测试添加种子数据,以便安排/行为/断言测试的安排方面可以专注于安排我特别需要的内容安排我的测试,而不是安排自己安排一大堆间接与测试代码间接相关的参考数据。

我碰巧使用NHibernate,但我相信任何数据播种功能都应该忽略它,并且能够直接操作数据库; ORM可能会改变,但我总是使用SQL数据库。

我正在使用NUnit,因此设想连接到test / testfixture setup / teardown(但我认为一个好的解决方案可能会转移到其他测试框架)。

我在我的主项目中使用FluentMigrator来管理参考数据的模式和种子,因此它很好,但对于能够在整个解决方案中使用FluentMigrator框架来实现一致的方法并不是必不可少的。 / p>

所以我的问题是,“你如何在C#中为数据库数据进行集成测试?”你直接执行SQL吗?你使用框架吗?

2 个答案:

答案 0 :(得分:2)

您可以在Sql Server Compact上进行集成测试,您将拥有一个.sdf文件,您可以连接到它,将文件的路径作为连接字符串。这将更快,更容易设置和使用。

您的集成测试可能不需要数百万行数据。您可以将测试数据插入数据库并将其另存为TestDbOriginal.sdf

当您运行测试时,只需制作此“TestDbOriginal.sdf”的副本,然后处理已经附加数据的副本。如果要测试特定方案,则需要通过调用添加,删除,编辑等方法来准备数据。

当您进行生产或性能测试时,请切换回原始服务器版本,无论是Sql Server 2008还是其他任何版本。

答案 1 :(得分:1)

我不知道它是否一定是'正确'的事情,但我总是使用我的添加/创建方法播种。