項目在測試時碰到一個問題,就是JVM加載參數的問題。
web項目本身在注入配置信息的時候,讀取的是本地的配置文件,但是配置文件的位置是卸載tomcat 里面配置的JAVA_OPTS里面的。
問題出現了:
JAVA_OPTS將變量寫入了JRE,但是在執行maven test的時候,是沒有寫入JRE參數的,所以在進行諸如service等涉及到數據庫的測試的時候,將無法正確加載數據庫的配置,導致無法進行數據庫測試。
解決方案:
使用configuration來注入參數到JRE當中,這樣就可以將參數寫入JRE了,然后即可讀取本地的配置文件
pom代碼如下:
1
2
3
4
5
6
7
8
|
< plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-surefire-plugin</ artifactId > < configuration > < forkMode >pertest</ forkMode > < argLine >${maven.test.jvmargs}</ argLine > </ configuration > </ plugin > |
maven plugin
可以使用該plugin,maven本身不提供測試的,使用的是該插件,通過注入argLine可以方便我們注入一些JVM的參數
比如我在進行spring測試的時候,因為將一些敏感信息配置到配置文件中,所以文件本身是不在項目中的,目前只能通過注入jvm參數,然后就可以通過System.getProperty來獲取到對應的參數
至于forkMode是測試指定的參數。
forkMode 可設置值有 “never”, “once”, “always” 和 “pertest”。
參數 | 解釋 |
---|---|
pretest | 每一個測試創建一個新進程,為每個測試創建新的JVM是單獨測試的最徹底方式,但也是最慢的,不適合hudson上持續回歸 |
once | 在一個進程中進行所有測試。once為默認設置,在Hudson上持續回歸時建議使用默認設置。 |
always | 在一個進程中并行的運行腳本,Junit4.7以上版本才可以使用,surefire的版本要在2.6以上提供這個功能,其中threadCount執行時,指定可分配的線程數量。只和參數parallel配合使用有效。默認:5。 |
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/ethanwhite/article/details/50498550