爲什麼在Spring應用程序上下文中運行失敗的測試會導致我的Jenkins構建崩潰?關閉Spring ApplicationContext時Jenkins構建失敗
我正在使用Ant構建我的應用程序並在Jenkins上運行JUnit測試。
我在Eclipse中運行Ant構建時沒有遇到任何問題,有或沒有失敗的測試。
然而,當我嘗試運行與詹金斯的打造,建立一個沒有當它已經完成運行JUnit測試記錄異常失敗:
...
[junit] INFO: Executing Stored Procedure with parameters {@pivoting=1, @ignoreReference=0}
[junit] Tests run: 7, Failures: 1, Errors: 0, Time elapsed: 7.831 sec
[junit] Sep 22, 2015 4:23:57 PM org.springframework.context.support.AbstractApplicationContext doClose
[junit] INFO: Closing [email protected]590d1:
startup date [Tue Sep 22 16:23:52 BST 2015]; root of context hierarchy
BUILD FAILED
E:\Jenkins\jobs\workspace\AntBuilds\build.xml:336: Tests failed
Total time: 16 seconds
Build step 'Invoke Ant' marked build as failure
Archiving artifacts
Recording test results
Finished: FAILURE
上面的輸出是意想不到的,因爲我已經配置瞭如果測試失敗,則構建爲簡單不穩定,並且在運行測試後,我已經配置了JaCoCo報告以發佈。
通常我會看到更多的東西一樣:
[junit] INFO: Closing [email protected]38e598: display name [[email protected]38e598]; startup date [Tue Sep 22 16:01:10 BST 2015]; root of context hierarchy
[junit] Tests FAILED
[jacoco:report] Loading execution data file E:\Jenkins\jobs\jacoco.exec
[jacoco:report] Writing bundle 'Coverage Report' with 117 classes
...etc
刪除失敗的測試允許建立正常繼續:
BUILD SUCCESSFUL
Total time: 36 seconds
Archiving artifacts
Recording test results
[JaCoCo plugin] Collecting JaCoCo coverage data...
[JaCoCo plugin] **/**.exec;**/dist/WEB-INF/classes;**/src; locations are configured
[JaCoCo plugin] Number of found exec files for pattern **/**.exec: 1
[JaCoCo plugin] Saving matched execfiles: E:\Jenkins\jobs\myJob\jacoco.exec
... etc
我的答案至今
我有已成功在Jenkins上構建其他應用程序。不同的是,這些測試都打上了Spring應用程序上下文:
@ContextConfiguration(locations="file:WEB-INF/MyJob-servlet.xml")
@RunWith(SpringJUnit4ClassRunner.class)
如果詹金斯失敗只是「BUILD之前關閉應用程序上下文時測試失敗,因爲這條線出現故障的構建我一直想知道失敗」的消息:
Closing [email protected]590d1:
startup date [Tue Sep 22 16:23:52 BST 2015]; root of context hierarchy
我都需要升級到:
- 的JUnit 4.4
- 小號pring-integration-test-2.1.3.RELEASE
這個預感是否正確?如果是這樣,這是Jenkins/Spring /不兼容版本的錯誤,還是我的實現不正確?
我的build.xml文件相當廣泛,所以我只會發布它,如果它實際上是必要的 –