我们使用maven和surefire 2.19进行Junit 4.11测试。当我们使用我们的IDE或命令行运行时,我们没有看到任何故障。但是在间歇性地使用Jenkins时,我们的一些测试会失败verifyStatic断言。surefire,PowerMock和verifyStatic间歇性故障
这里有一个片段:
verifyStatic(times(1));
AClass.someStaticMethod(aUrl);
神火有时会报告:
[java] Failed tests:
[java] AClass.someStaticMethod:55
[java] Wanted but not invoked AClass.someStaticMethod(
[java] "http://foo.com/artwork.png"
[java]);
[java] Actually, there were zero interactions with this mock.
我已经厌倦了外出时单线程的思考,这就是我们的IDE都在做测试,但没有帮助:
<reuseForks>false</reuseForks>
<forkCount>1</forkCount>
对可能发生什么以及如何解决它的任何建议?
更新:
此测试之前,我打电话mockStatic(AClass.class)。
此外,我已经能够通过设置一个while循环在命令行上重现这一点。
while [ $? -eq 0 ]; do ./mvnvm -T 8 clean && \
./mvnvm -T 8 -b multithreaded -am -Dtest=AClassTests \
-DfailIfNoTests=false -Dmaven.test.skip=false -pl MyProject test; done
最终在这个循环中,我将得到测试失败。现在我必须弄清楚如何在发生故障之前检测故障并获得调试器。
更新2:
我可以很容易地重现干净行家之后这个问题,似乎干净后发生的第一次运行。
对不起,我撒谎了。 Thread.sleep对此没有影响。
更新3:
根据更新2,Thread.sleep没有效果。
Arthor,这里是更多的代码:其正常执行的作为部分期间
PowerMockito.mockStatic(ImageUtil.class);
Mockito.when(ImageUtil.getImageDetail(imageUrl)).thenReturn(detail);
ValidationCommand command = new ValidationCommand();
command.execute(validationContext);
Thread.sleep(1000);
PowerMockito.verifyStatic(times(1));
ImageUtil.getImageDetail(imageUrl);
command.execute将调用ImageUtil.getImageDetail方法。
您好!你能提供更多关于你的静态方法的细节吗?它叫什么名字?你把“Thread.sleep”放在哪里? 'verifyStatic'之前?或之后? –