我正在運行的項目的結構假設運行時模塊(或插件,但是你稱之爲),就像C風格.so對象。目前它只能通過ClassLoader
,我試圖用maven來測試它。我在我的項目的測試目錄中寫入了Test.java
和TestModule.java
文件。但maven試圖運行它們而不是Test.java
。我如何指定測試文件?Maven測試模塊
P.S.除ClassLoader
之外是否有加載模塊的系統?而新的外國模塊必須是項目取決於我的核心項目?
我正在運行的項目的結構假設運行時模塊(或插件,但是你稱之爲),就像C風格.so對象。目前它只能通過ClassLoader
,我試圖用maven來測試它。我在我的項目的測試目錄中寫入了Test.java
和TestModule.java
文件。但maven試圖運行它們而不是Test.java
。我如何指定測試文件?Maven測試模塊
P.S.除ClassLoader
之外是否有加載模塊的系統?而新的外國模塊必須是項目取決於我的核心項目?
Maven - 與其他任何構建系統一樣 - 需要區分生產和測試代碼。推薦的變體是使用目錄結構這兩個類分開:
/src
/main
/java
-- your production classes go here
/test
/java
-- your test classes go here
如果你的項目有不同的結構,你可以change在pom.xml
文件的默認行爲(不推薦):
<build>
<sourceDirectory>${basedir}/src/</sourceDirectory>
<testSourceDirectory>${basedir}/test</testSourceDirectory>
<outputDirectory>${basedir}/bin</outputDirectory>
<testOutputDirectory>${basedir}/test-bin</testOutputDirectory>
...
</build>
如果你把這兩個產品和測試代碼放在同一個目錄(不好,不好),你可以告訴Maven include or exclude類正在運行測試:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<includes>
<include>Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
你仍然需要某種形式的命名約定來識別測試類(建議:爲MyClass
類中的相應測試類應稱爲MyClassTest
):
<includes>
<include>**/*Test.java</include>
</includes>
Maven使用maven-surefire-plugin運行測試。爲此,它執行目標test 。
includes屬性定義了什麼類將被視爲測試類。默認名稱模式是:
<includes>
<include>**/Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
所以,如果你不想在Maven的測試階段(也許是因爲你只是想手動運行該測試)要執行的測試不是改變includes
財產或重命名類(例如CheckModule而不是TestModule)。
如果您的TestModule.java
是應用程序代碼,而不是某種測試代碼,則不要將其放在測試目錄中。看看Maven default directory layout,如果可能的話使用它。
Maven在src/main/test中搜索測試類,但是您可以自定義它。儘管如此,遵循標準的maven結構更簡單(參見Mortiz Petersen的回答) –
我沒有太多時間來檢查它是否有效,並繼續我的項目,所以我會接受它,但稍後再檢查它。 – shved