2013-05-20 25 views
2

時,我有一個src/main/app文件夾下的test-mule-flow.xml文件,我添加了一個單元測試:文件都沒有發現使用的是IntelliJ IDEA

MuleFlowTest extends FunctionalTestCase 
@Override 
public String getConfigResources() { 
    return "src/main/app/test-mule-flow.xml"; 
} 

@Test 
public void test...... 

實際上這些測試是正確執行,當我在Eclipse中執行它(騾子工作室)以及在Maven構建,但遺憾的是這些測試失敗的IntelliJ IDEA版本12.

而且我想這是由classloader造成的,IDEA,源文件是房子target/classes文件夾,測試類是房子在target/test-classes,這也許是原因,但怎麼可能我配置它?並且它在maven方式下更好,我不想在手動中做一些移動配置。

謝謝。

回答

3

看起來您正在使用相對文件路徑來加載文件。所以實際結果將取決於執行測試的JVM所在的目錄(它是「當前」目錄)。

這通常是一個壞主意。如果該文件應該接受與應用程序捆綁在一起,其存儲爲src /主/資源和使用類加載器加載:

InputStream in = MuleFlowTest.class.getResourceAsStream("/test-mule-flow.xml")); 

如果只有通過你的測試使用的文件,其存儲在SRC /測試/資源,並使用類加載器加載它(與上面相同)。

如果您確實需要將其作爲文件加載,請確保當前目錄始終是正確的,或者傳遞系統屬性,告訴代碼應該使用哪個基本目錄來創建絕對路徑。

+0

Aaaah,我錯過了文件名開頭的「/」......這個答案只是我的一天。謝謝!具體例子ftw。 (這是我得到回到Java後太遠了。) – Lunivore

3

您有指定的相對路徑,並且您沒有提供如何實際讀取此路徑下的文件的信息。

在從classpath讀取的情況下,應確保它在那裏。使用Maven有一個約定將資源置於src\main\resourcessrc\test\resources之下。 Maven知道的IDE通常會自動將這些位置添加到類路徑中。如果由於某種原因,您無法將文件放入resources或包含在classpath中的其他位置,則可以在IDEA中手動配置項目的源目錄。

在從文件系統中讀取文件的情況下,您應該檢查IDEA中相應的運行/調試配置中您作爲工作目錄的情況。

0

Maven使用下面4個文件夾爲它的類路徑:

  • 的src /主/ JAVA - 在目標/類輸出
  • 的src /主/資源 - 輸出在目標/類
  • 的src /測試/ JAVA - 在目標/測試類輸出
  • 的src /測試/資源 - 產出的目標/測試類

如果你想使用的任何其他文件夾你的測試(和你有一個體面的理由),那麼你應該明確在http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html描述指定它Maven的資源插件

此外,你應該從SRC文件夾不文件,用在您的測試,而是從目標(和你不應該指定「目標」要麼,只是使用的文件名),這已經是JVM的類路徑。

+0

謝謝,但有關目標,intellij 12仍然找不到目標文件夾中由apache cxf-codegen-plugin生成的類。 –

相關問題