我的代碼中有一個測試,它創建一個目錄,然後在其中創建一個文件。單元測試由於surefire插件forkmode而失敗
但是,此測試失敗,因爲寫入文件的測試部分無法找到所創建的目錄。修復它的唯一的事情就是設置萬無一失插件不會分支,像這樣:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>never</forkMode>
</configuration>
</plugin>
我會解釋此修復程序意味着目錄在一個JVM過程中產生的,而在另一個JVM進程創建的文件/線程?
此測試失敗與最近剛開始失敗的單臺機器隔離。
,我已經嘗試了幾件事情是:
- 有衆多的JDK版本流傳在系統上,因此擺脫了所有的不同之處在於工作在許多其他系統的一個(1.6 .0_19)。
- 嘗試從Administrator cmd提示符運行該項目上的'mvn test'。
- 檢查父目錄的權限是否正確。
- 嘗試從零開始檢查整個項目並執行相同操作。
- 檢查發生此事的目錄是否從AntiVirus的按訪問掃描程序中排除。
以上都沒有任何效果。唯一有所作爲的是<forkMode>
配置。我無法弄清楚爲什麼那個測試突然停止工作,因爲它周圍絕對沒有任何代碼變化或者它正在測試的功能。
正在使用的maven-surefire-plugin的版本是2.12.4。如果'never'配置丟失,更新到最新(2.14.1)不會修復測試。
<forkMode>
是deprecated但是僅在版本2.14以後。
我真的很感興趣的是潛在的問題可能是什麼。我希望最終的結論不像硬盤或硬件問題那麼簡單。
是在測試'setUp()'方法中還是在另一個測試用例中創建的目錄?你爲每個測試創建不同的目錄還是在測試中共享?請記住,測試用例可能會重新排序或並行運行,並且 - 根據測試邏輯 - 可能導致目錄的併發修改。 – Pyranja 2013-04-24 08:22:03
奇怪!我不太清楚這是兩個單獨的測試來創建目錄並寫入文件,或者如果兩個事件都發生在相同的測試方法中?測試執行順序可以由測試運行器隨機重新排序。 – 2013-04-24 08:24:36
@Pyranja現貨!該目錄是在setUp()方法中創建的,並且有兩個測試然後嘗試在該目錄中創建文件。但我也曾在評論過所有其他測試之後嘗試過,但那次測試失敗了。 – 2013-04-24 10:47:47