JUnit平等测试突然开始在Jenkins上失败,但在Maven或Eclipse中没有本地

时间:2014-07-08 00:08:40

标签: java maven junit jenkins powermock

我有一个非常奇怪的情况,一个已经过几百个版本的测试已经开始失败,但只在Jenkins网站上。它自创建以来就没有被修改过。文件夹最近已被移动,但我不知道这将如何影响测试结果,并且没有其他测试开始失败。

测试只是检查返回对象的相等性。它基本上是这样的:

Trajectory[] trajectory = new Trajectory[Trajectories.numTrajectories];

@Before
public void setup() throws Exception {
    for (int i = 0; i < Trajectories.numTrajectories; i++) {
        trajectory[i] = mock(Trajectory.class);

        // Mock the creation of trajectories
        PowerMockito.whenNew(Trajectory.class).withArguments(
                "filename" + i).thenReturn(trajectory[i]);
    }

    Trajectories.create();
}

@Test
public void testCreated() {
    // Verify that the created trajectories are correctly returned
    for (int i = 0; i < Trajectories.numTrajectories; i++) {
        assertEquals(trajectory[i], Trajectories.get(i));
    }
}

Trajectories.create()看起来像:

public static void create() {
    for (int i = 0; i < numTrajectories; i++) {
        Trajectory t = new Trajectory("filename" + i);
        tList.add(t);
    }
}

因此,当在Trajectory中创建Trajectories.create()对象时,PowerMock会在其位置注入模拟。然后我们比较一下这个模拟是否正确返回。

我甚至添加了一些日志记录来比较本地运行的输出与Jenkins服务器上的输出System.out.println(trajectory[i] + "; " + Trajectories.get(i))。在本地,一切都匹配:

Mock for Trajectory, hashCode: 1327390425; Mock for Trajectory, hashCode: 1327390425
Mock for Trajectory, hashCode: 1189682735; Mock for Trajectory, hashCode: 1189682735
...

但是詹金斯,我得到了:

Running modelClasses.TestTrajectories
Mock for Trajectory, hashCode: 1455537357; Mock for Trajectory, hashCode: 1230136122
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.393 sec <<< FAILURE!
testCreated(modelClasses.TestTrajectories)  Time elapsed: 0.077 sec  <<< FAILURE!
java.lang.AssertionError: expected:<Mock for Trajectory, hashCode: 1455537357> but was:<Mock for Trajectory, hashCode: 1230136122>

正如我们所看到的,哈希是不同的。我不明白这个Jenkins服务器上可能会有什么不同会导致这种差异。

Jenkins服务器正在Linux发行版上运行。使用Jenkins Cobertura,Maven和Git插件。使用的Maven目标是clean cobertura:cobertura -Dcobertura.report.format=xml

是否有人知道可能导致此不一致的原因?

编辑:说实话,这不是一个很好的测试。它并没有真正测试任何有用的东西,而且看起来更像是对PowerMock的测试,而不是这个代码,但我仍然非常好奇为什么它会突然开始失败。

0 个答案:

没有答案