2010-08-22 119 views
4

爲了清理一些混亂的東西,我着手將我的測試代碼全部放在一個普通的java項目中(全部在src/main/java中),然後聲明爲一個<scope>test</scope>依賴另一個項目,並期望測試運行。從類路徑運行maven測試

沒有這樣的運氣。 surefire想要運行它可以在源代碼中看到的測試。

我可以看到一個可悲的明顯的解決方案,這裏涉及到build-helper插件,並將測試作爲源目錄添加到測試編譯環境中,但我希望避免它。

如果有人想知道,所有這一切的原因是使用故障安全插件來運行一些集成測試的POM配置變得如此複雜,以至於我想將測試類的編譯從運行測試。

回答

5

Maven Surefire v2.15現在可以使用了。只需以下類型的配置添加到萬無一失插件:

<build> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.15</version> 
    <configuration> 
     <dependenciesToScan> 
     <dependency>com.group.id:my-artifact</dependency> 
     <dependency>com.group.id:my-other-artifact</dependency> 
     </dependenciesToScan> 
     ... 
    </configuration> 
    ... 
    </plugin> 
    ... 
</build> 

你也應該申報相關內容部分的實際依賴性:

<dependencies> 
    <dependency> 
    <groupId>com.group.id</groupId> 
    <artifactId>my-artifact</artifactId> 
    <type>test-jar</type> 
    <version>1.1</version> 
    <scope>test</scope> 
    </dependency> 
    <dependency> 
    <groupId>com.group.id</groupId> 
    <artifactId>my-other-artifact</artifactId> 
    <type>test-jar</type> 
    <version>1.1</version> 
    <scope>test</scope> 
    </dependency> 
</dependencies> 
+0

你可能還需要com.group.id:my-artifact「main jar」(不僅僅是測試jar),但是除此之外,它的工作方式就像一個魅力 – mac 2015-01-25 03:55:14

1

難道你不能這樣做嗎?

我的意思是把代碼放在src/test/java中,取決於你的主模塊,並在你的測試模塊中運行測試?

3

沒有這樣的運氣。 surefire想要運行它可以在源代碼中看到的測試。

這是目前無法開箱,神火只是看起來在班target/test-classes

這實際上是記錄爲SUREFIRE-569 - There should be a way to run unit tests from a dependency jar

我可以看到一個可悲的明顯的解決方案,這裏涉及build-helper-plugin並將測試作爲源目錄添加到測試編譯環境中,但我希望避免它。

目前的解決方法是使用dependency:unpack解壓罐到target/test-classestest階段之前。

+0

我這樣做的時候,我得到了org.junit NoClassDefFound錯誤。斷言!但這可能是一些別的惡作劇。 – bmargulies 2010-08-22 22:01:44

+0

@bmargulies嗯......很奇怪。我不明白爲什麼你會得到NoClassDefFoundError。我可能會嘗試,但稍後。 – 2010-08-22 22:20:24

+0

我提交了一個錯誤報告。我有一些想法,但是我通過看似無關的類路徑調整讓它消失了。它*可能會在Eclipse錯誤的時刻寫出類文件的結果。 – bmargulies 2010-08-23 01:43:22