我正在开发一个几何库。有200+单元测试。
有一个特别顽固的测试,每当我选择"Run All“时都会失败,但当我单独运行该测试时,或在其上使用调试器时,测试通过。我相信这个问题是在我从visual studio '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));
}
发布于 2015-09-01 22:02:04
尝试以下操作:
打开Nunit GUI,在运行测试之前,在设置中更改以上设置:
它帮助我发现了我的问题。
顺便说一句:你使用的是什么版本的NUNIT?如果你不知道什么是Nunit GUI,那么你可能没有单独下载Nunit。您可以从以下位置获取安装:
发布于 2015-08-30 06:07:58
根据我在测试用例中看到的,不同的行为是奇怪的,但测试失败是一个完全有效的结果:
与自身相交的平面将是平面,因此如果结果被限制为一条线,那么平面上具有两个不同点的任何线都将是有效的结果,但对一条特定线的测试看起来像是将执行结果反向工程到测试预期中。
如果需求/规范非常具体地说明了来自单位交集的结果线的方向,那么情况就不同了,所以您可能想要在这方面提供一些更多的见解。
我很抱歉将此作为答案而不是缺少注释的代表发布。
发布于 2015-09-04 17:07:21
请检查是否有静态变量。静态变量存在于AppDomain级别,因此,一个测试用例设置的静态变量可能会对其他测试用例造成副作用。
您可以先在单独的应用程序域中运行此测试用例,以在开始搜索静态变量之前确认行为。很抱歉,我从来没有尝试在nunit中创建一个新的appdomain。但是这里的一个答案确实给出了一个关于如何为测试用例创建新的应用程序域的提示-- Run unit tests in different appdomain with NUnit
https://stackoverflow.com/questions/31683313
复制相似问题