繁体   English   中英

运行所有测试时单元测试失败,但在调试时通过

[英]Unit Tests failing when I Run All Tests but pass when I Debug

我在 Visual Studio 2017 中使用 NUnit3 并执行 TDD。 自从我更新了我的代码以使我的最新测试通过后,发生了一些非常奇怪的事情。

现在,当我单击“运行所有测试”时,我的其他 3 个测试失败,如下所示:

在此处输入图片说明

它告诉我 Assert 方法中的实际值和预期值不相等。

但是,当我在 Assert 方法所在的行放置断点并开始调试时,堆栈跟踪显示预期和实际值相同,然后测试通过,如下所示:

在此处输入图片说明

我是在做一些愚蠢的事情,还是 VS2017 或 NUnit 中可能存在错误?

这曾经发生在其他人身上吗?

[编辑:我应该补充一点,我已经将每个测试作为一个单独的类编写]

失败的测试共享一个资源,当一起测试时会影响它们。 重新检查受影响的测试及其主题。

您还应该查看主题中的静态字段或属性。 如果在设计类时使用不当,它们往往会导致问题。

可能会出现一些细微的差异。 例如,如果第一个测试改变了影响第二个测试行为的状态,那么如果我单独运行第二个测试的结果可能会不同。

在无法使用断点时帮助理解测试失败的一个想法可能是添加日志记录。

无论如何,回答您的问题:

这曾经发生在其他人身上吗?

是的

我是在做一些愚蠢的事情,还是 VS2017 或 NUnit 中可能存在错误?

我敢打赌这两者都不是:只是一个更微妙的案例

我在使用 MSTest 作为测试框架的 Visual Studio 2017 中遇到了类似的问题。 单元测试中的断言在运行测试时失败,但在调试单元测试时会通过。 这发生在少数单元测试中,但不是全部。 除了断言失败之外,许多单元测试也由于 System.TypeLoadException( 无法从程序集错误加载类型)而失败。 我最终做了以下解决问题的方法:

  1. 打开解决方案中的Local.testsettings文件
  2. 转到“单元测试”设置
  3. 取消选中“对测试目录中的程序集使用加载上下文”。 复选框

采取这些步骤后,所有单元测试在运行时开始通过。

我自己也遇到过这种现象,但很容易找到原因。 更具体地说,我测试了一些矩阵计算,在我的测试类中,我将要计算的数据定义为类变量并用它执行计算。 然而,我的矩阵例程修改了原始数据,所以当我在测试类上使用“运行测试”时,第一个测试破坏了数据,下一个测试无法成功。

下面的示例代码试图说明我的意思。

[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]{};
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM