单独运行时通过三个单元测试,一起运行时只通过一个

时间:2016-08-02 16:29:36

标签: unit-testing nunit specflow

我有三个测试,FunnyCarSteps.csCarLotMaxSteps.csCarTypeSteps.cs。当运行seperatley时,它们都会通过,但是当一起运行时,只有CarLotMaxSteps通过。

CarTypeSteps.cs在第49行失败,使用lambda方法没有源可用错误。 FunnyCarSteps.cs在第19行失败,索引超出范围错误。

我不熟悉单元测试,也不了解发生了什么。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

由于Program.Mainstatic,您的CarList可能也是静态的。 NUnit并行运行测试,因此每个测试几乎同时运行,每个测试都清除列表并同时添加它。

这就是为什么你的测试可以自行运行,但是在一起运行时会失败。一个启动并开始测试,然后第二个出现并更改第一个测试正在使用的数据。

除了main之外,您需要从Program中的所有内容中删除静态内容。理想情况下,您应该将所有汽车列表代码重构为新的非静态类。程序用于运行程序,它不应该与汽车有任何关系。您应该在Main中创建CarLot(或其他)类并执行它,而不是向Program添加属性。

另一个选择是将属性[Parallelizable(ParallelScope.None)]添加到每个测试类中。这将导致他们一次运行一个。这将解决您的测试问题,但它并不能解决您的代码不仅仅是一个简单的练习错误的事实。