2012-01-06 45 views
0

我使用Eclipse赫利俄斯服務版本2的Java 6和JUnit 4JUnit 4測試情況下通過,但是當跑

我已經得到了通過,當我單獨調試和測試案例失敗當我自己運行時失敗。該故障是由線路

FileUtils.deleteDirectory(target);

未來有錯誤

ERROR [main] (MyRequestHandler.java:56) - An unexpected error occurred when processing MyRequestHandler java.io.IOException: Unable to delete file: \apps\Codes\MP2\LandingStrips\inprocess\12345\testTarDir\myfile.txt

在這兩種情況下,proram試圖刪除它之前調用是回來真。唯一的其他事情我知道的是,在調試期間的運行參數是

[-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2914, -Dfile.encoding=Cp1252]

和運行期間

[-Dfile.encoding=Cp1252]

我不知道這意味着什麼,或者如果它的事項,但爲了儘可能提供儘可能多的背景。

編輯 - 全堆棧跟蹤:

ERROR [main] (MyRequestHandler.java:56) - An unexpected error occurred when processing MyRequestHandler java.io.IOException: Unable to delete file: \apps\Codes\MP2\LandingStrips\inprocess\12345\testTarDir\myfile.txt at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1643) at org.apache.commons.io.FileUtils.cleanDirectory(FileUtils.java:1268) at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:1200) at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1634) at org.apache.commons.io.FileUtils.cleanDirectory(FileUtils.java:1268) at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:1200) at com.codes.requesthandler.MyRequestHandler.deleteDirectory(MyRequestHandler.java:74) at com.codes.requesthandler.MyRequestHandler.process(MyRequestHandler.java:50) at com.codes.requesthandler.MyRequestHandlerTest.processWithProperArguments(MyRequestHandlerTest.java:135) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

+0

堆棧跟蹤還有什麼? – hvgotcodes 2012-01-06 16:35:35

+0

也許調試器/ eclipse鎖定文件?或者該文件在另一個程序中打開? – aseychell 2012-01-06 17:13:42

+0

該文件不應該在任何其他程序中打開,因爲它是在測試的setUp()中創建的,並且只要Ecplise持有鎖,是否有除File.canWrite()之外的其他檢查方法? – hSherlock 2012-01-06 17:34:14

回答

0

可能與..我有,我會從創建一個新的數據文件,並與現有的數據進行比較的內容在命令行中運行JUnit測試文件使用Apache Commons IO庫中的org.apache.commons.io.FileUtils.contentEquals()方法 - 我確信它包裝了Java IO類。如果新文件的內容與舊文件的內容完全匹配,則單元測試通過。

我總是在單獨的終端窗口中使用Ant運行單元測試 - 而不是通過Eclipse。 只要在Eclipse中打開該項目,就會導致測試失敗大約25%的時間。 (我在一個循環中重複運行了1000次測試,平均每次都會失敗250次)。我懷疑Eclipse Java Builder或我安裝的某個Eclipse插件有時會干擾JUnit訪問新創建的數據文件。

今天嘗試,我無法讓測試失敗。我的項目或Eclipse設置中的某些內容可能已更改。我不知道是什麼。

所以我的建議是嘗試通過Ant來運行你的單元測試 - Eclipse以外的項目以及未在Eclipse中打開的項目。

相關問題