NUnit测试调试

Cha*_*lor 16 c# nunit unit-testing

我正在研究几何图书馆.有200多个单元测试.

每当我选择"全部运行"时,有一个特别顽固的测试失败,但是当我单独运行该测试或者使用调试器时测试通过.我相信这个问题出现在我从视觉工作室'13转移到'15版的时候.

现在关于几何库的一些注意事项:

对象是不可变的.

测试之间没有共享对象.

所以我的问题:这种奇怪行为的可能原因是什么?

编辑:

[Test()]
public void Plane_IntersectionWithPlane_IdenticalPlane()
{
     Plane testPlane = new Plane(new Direction(Point.MakePointWithInches(2, -1, 1)), 
                                               Point.MakePointWithInches(2, 1, 2));
     Line found = (testPlane.Intersection(testPlane));

     Line expected = new Line(new Direction(Point.MakePointWithInches(0, -1, -1)), 
                                            Point.MakePointWithInches(2, 1, 2));
     Assert.IsTrue(found.Equals(expected));
}
Run Code Online (Sandbox Code Playgroud)

for*_*rir 7

我在过去遇到过类似的问题,但它总是被证明是底层代码元素之间的一些意想不到的交互,或者是编写测试的方式.要检查的一些问题是:

  • 静态对象构造/破坏
  • 同步问题
  • 模拟设置/清理问题

我发现追踪问题的最佳方法是遵循类似于@Matthew Strawbridge在评论中提出的方法.我Ignore向Tests/TestFixtures 添加属性以删除测试,直到run-all开始工作,然后开始重新添加它们,直到它再次中断,缩小问题范围.

有时您还会发现忽略当前失败的测试会导致另一个测试失败.这是一个很好的迹象,表明问题实际上是由于你的另一个测试没有正确清理.

查看失败/似乎导致失败的测试之间的代码可以帮助您缩小交互范围.测试的错误/失败原因当然也有帮助......

选择"Run-all"以可预测的顺序运行所有测试,因此测试通常每次都以相同的方式运行.如果您选择一批测试,那么跑步者可能会选择以不同的顺序运行它们,这取决于您的选择顺序,这可能是您在选择测试时遇到不同行为而不是使用run-all的原因.


Ila*_*n.b 3

请尝试以下操作:

打开 Nunit GUI 在运行测试之前更改上述设置:

在此输入图像描述

它帮助我发现了我的问题。

顺便说一句:您使用的是哪个版本的 NUNIT?如果您不知道什么是 Nunit GUI,那么您可能没有单独下载 Nunit。您可以从这里进行安装:

http://www.nunit.org/index.php?p=download