2013-08-23 61 views
0

我正在開發一個多模塊Maven Java EE項目。我們使用Spring爲每個模塊分別配置。我們在src/test/integration文件夾中放置了集成測試,以及相應模塊的UT(可以在src/test/ut中說)。Maven在多模塊集成測試類路徑中找不到一些資源

當執行模塊B的集成測試時,我們需要首先對模塊B依賴的模塊A執行一些清理/初始化。這意味着:我們需要訪問模塊A的測試數據,同時執行模塊B的測試。我爲模塊A的集成測試設置了模塊B集成測試的依賴關係,其範圍爲「test」。然後,模塊-A-test.jar被構建並部署在本地存儲庫中。

當執行模塊B的測試時,測試運行程序將初始化並且在類路徑中找到兩個模塊的application-context.xml。請注意,模塊A的application-context.xml駐留在module-A-test.jar中,因此該jar位於類路徑中。

模塊-A-Test.jar的的結構是:

module-A-test.jar 
    |- sqlFile 
    | |-clean-module-A.sql 
    | |-some other sql scripts 
    |-module-A-db.properties 
    |-module-A-db-config.xml 
    |-module-A-IT-config.xml 

模塊-B的目標文件夾的結構是:

classes 
    |- all module clases as expected 
surefire-reports 
    |- test result reports 
test-classes 
    |- test classes 
    |- sqlFile 
    | |-clean-module-B.sql 
    | |-some more sql scripts 
    |-module-B-db.properties 
    |-module-B-db-config.xml 
    |-module-B-IT-config.xml 

我讀行家測試周期類路徑是從這些來源建立:

- The test-classes directory 
    - The classes directory 
    - The project dependencies 
    - Additional classpath elements 

從那我希望能夠閱讀清潔模塊A.sql和C瘦模塊,B.sql。 然而,當我運行代碼片段時,文件沒有找到(即使是模塊B),我跳出了ITException。當然對於clean-module-A.sql也是如此。

StringBuilder path = new StringBuilder(); 
    path.append("sqlFile/"); 
    path.append("clean-module-B.sql"); 
    File file = new File(path.toString()); 
    if (!file.exists()) { 
     throw new ITException("File " + file.getPath().toString() + " does not exist"); 
    } 

我希望我能夠正確清楚地描述這種情況。

現在最後的問題是: 爲什麼我能夠在claspath上看到module-B-IT-config.xml(甚至是module-A-IT-config.xml)而不是sql資源?

非常感謝你的任何想法!

帕夫林

回答

0

你的問題是,你正在尋找的文件都在裏面罐子(當您從IDE運行測試的文件直接在文件系統上)。

Spring正在加載應用程序上下文文件,方法是查看類路徑並打開流以讀取它們。

你只需要做同樣的事情。即類似這樣的:

ModuleATestClass.class.getResourceAsStream("/sqlFile/clean-module-A.sql") 
相關問題