我的集成测试使用的是使用EF初始化程序生成的实时数据库。当我单独运行测试时,它们按预期运行。但是当我同时运行它们时,我会遇到很多失败的测试。
我似乎有些重叠。例如,我有两个使用相同设置方法的测试。这种设置方法构建&填充数据库。两个测试都执行相同的测试ACT,它将一些项目添加到数据库(相同的项目),但唯一的是每个测试都在寻找不同的计算(而不是一个大的测试做很多事情)
我可以解决这个问题的一种方法是在设置中做一些技巧,为每个运行的测试创建一个唯一的数据库,这样一切都保持孤立。然而,当我这样做时,EF启动的东西是不起作用的,因为它正在创建一个新的数据库而不是丢弃&取而代之的是一个新的(后者触发播种)。
关于如何解决这个问题的想法?看起来像是我的测试组织...只是没有展示如何最好地去做它并且正在寻找输入。真的不想手动运行每个测试。
答案 0 :(得分:2)
使用测试框架提供的测试设置和拆除方法,并在测试设置中启动事务,并在测试拆除中回滚事务(example for NUnit)。您甚至可以将安装和拆除方法放到基类中进行所有测试,并且每次测试都将在其自己的事务中运行,该事务将在测试结束时回滚并将数据库置于其初始状态。
答案 1 :(得分:0)
除了Ladislav所提到的,你还可以使用所谓的Delta Assertion。
例如,假设您测试向SUT添加新的Order
。
您可以创建一个测试,断言在测试结束时数据库中只有1 Order
。
但您也可以通过首先在测试方法开始时检查数据库中有多少Orders来创建Delta Assertion。然后在向SUT添加Order
后,您将测试数据库中是否有NumberOfOrdersAtStart + 1
。