當我在IntelliJ中運行測試時,訪問資源文件時遇到問題。當我從Maven運行相同的測試時,一切都按預期工作。IntelliJ包含類路徑上的另一個maven模塊的測試類
maven3項目有2個模塊:數據庫模塊和webapp模塊。 webapp-module依賴於數據庫模塊。
文件:
database-module/src/main/resources/dataSource.xml
database-module/src/test/resources/dataSource.xml
database-module/src/test/java/org/example/DataSourceTest.java
webapp-module/src/test/java/org/example/HomeControllerTest.java
有數據庫模塊測試類DataSourceTest。該測試使用classpath中的dataSource.xml。
DataSourceTest.java包含:
@Value("classpath:dataSource.xml")
private Resource myDataSource;
註釋@Value是org.springframework.beans.factory.annotation.Value。
當我運行測試時,變量myDataSource包含來自src/test/resources的數據。它適用於Maven和IntelliJ。
我在webapp-module中有另一個測試HomeControllerTest。該測試還以與DataSourceTest相同的方式使用dataSource.xml。然而,從Maven和IntelliJ運行測試有所不同:
如果我從Maven運行HomeControllerTest,它將按預期工作:它使用database-module/src/main/resources/dataSource.xml。 如果我從IntelliJ運行HomeControllerTest,它使用database-module/src/test/resources/dataSource.xml。
文件dataSource.xml僅存在於數據庫模塊中,webapp-module中沒有dataSource.xml。
我在運行HomeControllerTest時在IntelliJ中輸出了類路徑,而且我驚訝地發現數據庫模塊中的測試類存在,即使HomeControllerTest是webapp模塊的一部分。
類路徑(當測試從運行的IntelliJ):
C:/myproject/database-module/test-classes
C:/myproject/database-module/classes
C:/myproject/webapp-module/test-classes
C:/myproject/webapp-module/classes
該測試使用JUnit4。
當我從webapp-module調用測試時,爲什麼classpath上有數據庫模塊/測試類? 如何更改IntelliJ行爲以匹配構建類路徑的maven方式?
你有沒有從你的web應用模塊依賴於你的數據庫模塊? – 2014-12-04 17:09:43
是的,我喜歡。當我執行「mvn clean install」時,首先構建數據庫模塊,然後是webapp模塊。 HomeControllerTest使用數據庫模塊中的dataSource.xml,因此顯然存在依賴關係。但是,當我使用IntelliJ時,HomeControllerTest將拾取錯誤的dataSource.xml(即。database-module/src/test/resources/dataSource.xml,而不是database-module/src/main/resources/dataSource.xml)。 – tafit3 2014-12-04 18:47:57
您確定數據庫模塊測試jar中的webapp-module中沒有依賴項嗎? 什麼是Intellij運行/調試配置 - >您的測試 - >使用模塊的類路徑 – 2014-12-05 10:16:41