我正在开发一个几何库。有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-09-04 17:07:21
请检查是否有静态变量。静态变量存在于AppDomain级别,因此,一个测试用例设置的静态变量可能会对其他测试用例造成副作用。
您可以先在单独的应用程序域中运行此测试用例,以在开始搜索静态变量之前确认行为。很抱歉,我从来没有尝试在nunit中创建一个新的appdomain。但是这里的一个答案确实给出了一个关于如何为测试用例创建新的应用程序域的提示-- Run unit tests in different appdomain with NUnit
发布于 2015-09-04 23:05:46
如果此测试独立通过,但在与其他测试一起运行时失败,那么您的类中极有可能存在某种共享状态。
如果您说我们所有的对象都是不可变的,那么我的第一个猜测是看看
Line Intersection (Plane plane);
您期望此方法返回一个与您的“预期”行相同的line,因此交集可能会基于某种共享状态返回一条Line。
你能给我们展示一下交集的实现吗?
https://stackoverflow.com/questions/31683313
复制相似问题