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)
我在过去遇到过类似的问题,但它总是被证明是底层代码元素之间的一些意想不到的交互,或者是编写测试的方式.要检查的一些问题是:
我发现追踪问题的最佳方法是遵循类似于@Matthew Strawbridge在评论中提出的方法.我Ignore向Tests/TestFixtures 添加属性以删除测试,直到run-all开始工作,然后开始重新添加它们,直到它再次中断,缩小问题范围.
有时您还会发现忽略当前失败的测试会导致另一个测试失败.这是一个很好的迹象,表明问题实际上是由于你的另一个测试没有正确清理.
查看失败/似乎导致失败的测试之间的代码可以帮助您缩小交互范围.测试的错误/失败原因当然也有帮助......
选择"Run-all"以可预测的顺序运行所有测试,因此测试通常每次都以相同的方式运行.如果您选择一批测试,那么跑步者可能会选择以不同的顺序运行它们,这取决于您的选择顺序,这可能是您在选择测试时遇到不同行为而不是使用run-all的原因.
请尝试以下操作:
打开 Nunit GUI 在运行测试之前更改上述设置:
它帮助我发现了我的问题。
顺便说一句:您使用的是哪个版本的 NUNIT?如果您不知道什么是 Nunit GUI,那么您可能没有单独下载 Nunit。您可以从这里进行安装:
http://www.nunit.org/index.php?p=download