我在Visual Studio 2017中使用NUnit3并进行TDD。因为我更新了我的代码以进行最新的测试通过,所以发生了一些非常奇怪的事情。
现在,当我单击Run All Tests时,其他3个测试失败,如下所示:
它告诉我,Assert方法中的实际值和期望值不相等。
但是,当我在Assert方法所在的行放置一个断点并开始调试时,stacktrace显示expect和actual是相同的值,然后测试通过,如下所示:
我做了一些愚蠢的事情,或者VS2017或NUnit中是否有错误或其他什么?
这种情况会发生在其他人身上吗?
[编辑:我应该补充一点,我已将每个测试都写成一个单独的类]
答案 0 :(得分:7)
失败的测试在共同测试时共享影响它们的资源。重新检查受影响的测试及其主题。
您还应该查看主题中的静态字段或属性。如果在设计课程时使用不当,它们往往会引起问题。
答案 1 :(得分:1)
可能会出现一些微妙的差异。例如,如果第一次测试改变了影响第二次测试行为的状态,那么如果我单独运行它,那么第二次测试的结果可能会不一样。
在无法使用断点时帮助理解测试失败的想法可能是添加日志记录。
无论如何,回答你的问题:
这种情况会发生在其他人身上吗?
是
我做了一些愚蠢的事情,或者VS2017或NUnit中是否有错误或其他什么?
我打赌它既不是:只是一个更微妙的案例
答案 2 :(得分:0)
我在使用MSTest作为测试框架的Visual Studio 2017中遇到了类似的问题。单元测试中的断言在运行测试时失败,但在调试单元测试时通过。这是为少数单元测试而发生的,但并非全部。除了断言失败之外,由于System.TypeLoadException(Could not load type from assembly error),许多单元测试也失败了。我最终做了以下解决问题的操作:
执行这些步骤后,所有单元测试在运行时就开始通过。
答案 3 :(得分:0)
我自己遇到了这种现象,但是很容易找到原因。更具体地说,我测试了一些矩阵计算,并在测试类中定义了要作为类变量进行计算的数据,并使用该变量进行了计算。但是,我的矩阵例程修改了原始数据,因此当我在测试类上使用“运行测试”时,第一个测试破坏了数据,而下一个测试无法成功。
下面的示例代码旨在显示我的意思。
[TestFixture]
public void MyTestClass()
{
[Test]
public void TestMethod1()
{
MyMatrix m = new MyMatrix();
// Method1() modifies the data...
m.Method1(_data);
}
[Test]
public void TestMethod2()
{
MyMatrix m = new MyMatrix();
// here you test with modified data and, in general, cannot expect success
m.Method2(_data);
}
// the data to test with
private double[] _data = new double[1, 2, 3, 4]{};
}