我們使用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'之前?或之後? –