Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中为集成测试播种数据库数据?_C#_Asp.net Mvc_Nunit_Integration Testing_Fluent Migrator - Fatal编程技术网

如何在C#中为集成测试播种数据库数据?

如何在C#中为集成测试播种数据库数据?,c#,asp.net-mvc,nunit,integration-testing,fluent-migrator,C#,Asp.net Mvc,Nunit,Integration Testing,Fluent Migrator,我最近一直在编写一些针对ASP.NETMVC控制器操作的集成测试,并对设置运行测试所需的测试数据的困难感到沮丧 例如,我想测试控制器的“添加”、“编辑”和“删除”操作。我可以很好地编写“添加”测试,但是后来发现,要编写“编辑”测试,我要么必须调用“添加”测试的代码来创建一个记录,以便编辑它,要么在测试类中进行大量设置,这两种设置都不是特别吸引人的 理想情况下,我希望使用或开发一个集成测试框架,以便更容易以可重用的方式为集成测试添加种子数据,这样,排列/动作/断言测试的排列方面可以专注于安排我特别

我最近一直在编写一些针对ASP.NETMVC控制器操作的集成测试,并对设置运行测试所需的测试数据的困难感到沮丧

例如,我想测试控制器的“添加”、“编辑”和“删除”操作。我可以很好地编写“添加”测试,但是后来发现,要编写“编辑”测试,我要么必须调用“添加”测试的代码来创建一个记录,以便编辑它,要么在测试类中进行大量设置,这两种设置都不是特别吸引人的

理想情况下,我希望使用或开发一个集成测试框架,以便更容易以可重用的方式为集成测试添加种子数据,这样,排列/动作/断言测试的排列方面可以专注于安排我特别需要为测试安排的内容,而不仅仅是安排一堆参考数据与测试下的代码间接相关

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

我正在使用NUnit,因此设想挂接到测试/测试夹具设置/拆卸(但我认为一个好的解决方案可能会转移到其他测试框架)

在我的主要项目中,我将使用FluentMigrator框架来管理参考数据的模式和种子设定,这样做很好,但不是必须能够在整个解决方案中使用一致的方法


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

我不知道这是否一定是正确的做法,但我始终使用我的添加/创建方法进行种子设定。

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

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

运行测试时,只需复制此“
testdboriging.sdf
”并处理该副本,该副本已植入数据。如果你想测试一个特定的场景,你需要通过调用一些方法来准备你的数据,比如add,remove,edit


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

您确定这是个好主意吗?您是否建议OP仅仅为了测试而切换DB平台?您可以在许多流行的开源项目中看到这种方法。我也在我的一些项目中使用了这种方法。你的条件有什么缺点?顺便说一句,“只是为了测试”听起来很奇怪。使用数据库平台测试你的应用程序不是更好的主意吗?将数据库迁移到CE并在那里进行测试有什么意义?对我来说似乎是浪费时间。顾名思义,它很紧凑。它速度更快,易于处理、设置和连接。只要给出文件名,就可以连接。您不需要花费任何额外的时间,只需给出.sdf文件的路径,而不是sql server的连接字符串,就可以了。结帐谢谢@Mert。这当然是一种有效的方法,也是我以前使用过的方法。我遇到的缺点是;1) 因为测试数据保存在数据库中,所以它实际上成为共享测试数据。在多开发人员环境中,其他开发人员很容易为了自己的目的劫持特定于我的测试的测试数据。2) 在运行大量集成测试时,如果必须在测试或测试夹具之间恢复数据库,则会对性能造成很大影响;如果add操作的逻辑被破坏,这是否也会破坏我的编辑测试?我认为应该尽可能地隔离测试。如果添加操作被破坏(我应该对此进行单独的测试),这是否也会导致编辑操作失败?编辑测试不应与添加测试耦合。@Tristan,如果您是从安装方法中填充测试数据库,则如果创建操作不起作用,则所有测试都可能失败。这就是为什么我总是首先实现Create方法(加上测试),确保它们正常工作,然后使用它们填充数据库进行测试。然后我可以在我的DAO safe中编写测试并实现方法,因为我知道我的创建方法是正确的,并且任何失败都是由被测试的方法引起的。