2010-11-13 237 views
14

據我所知,測試文件的位置是正確的。Maven/Surefire發現沒有測試運行

當我運行「mvn test」時,它會找到四個名爲SomethingTest的類(它們位於'test'文件夾中)。

但是,它忽略了任何jUnit測試(jUnit 4,用@Test註釋)。

如何調試?

編輯 - 這可能與包含的jUnit的錯誤版本有關。我看到這個運行時,「MVN -X」

[DEBUG] Retrieving parent-POM: org.codehaus.plexus:plexus:pom:1.0.4 for project: org.codehaus.plexus:plexus-containers:pom:1.0.3 from the repository. 
[DEBUG]  org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:runtime (selected for runtime) 
[DEBUG]   junit:junit:jar:3.8.1:runtime (selected for runtime) 
[DEBUG]   org.codehaus.plexus:plexus-utils:jar:1.0.4:runtime (removed - nearer found: 1.4.1) 
[DEBUG]   classworlds:classworlds:jar:1.1-alpha-2:runtime (selected for runtime) 

即使我的根POM第一依賴是JUnit的4.8.1,由於某種原因,JUnit的3.8.1被包括在內。

編輯2 - 好吧,這似乎不是答案。測試類路徑包括正確的jUnit(4)和我的測試類。

編輯3 - 我有名爲SomethingTester的測試類。當我將它改爲SomethingTest時,它工作正常。我檢查了Surefire的包含模式,實際上它沒有配置成抓取Something Tester。衛生署。

+0

這似乎很奇怪。你可以發佈你的pom.xml嗎? – 2010-11-13 20:54:36

+0

@seanizer - 你有沒有看到編輯3?我的模式檢測測試只是沒有正確配置。 – ripper234 2010-11-13 21:09:53

+0

哦,我看,那麼你應該將其添加爲答案,並接受它 – 2010-11-13 21:11:36

回答

5

也許這就是問題:

MVN -X將打印這些一堆,所以你可以揣摩,如果它是從上面的東西 - 如不使用正確的JUnit版本(例如,當從快速入門工件創建時,我認爲默認值是3.8.1),在JUnit之前的類路徑中有TestNG。

編輯:我只是在一個簡單的項目中試過這個,並在上面的鏈接給出的類,它工作正常。我使用了junit版本4.8,這是我的項目中唯一的依賴項。爲了確認,你用@ org.junit.Test註釋了測試方法,並且在這些方法中有一些org.junit.Assert.assertXXX語句,對嗎?

編輯2:爲了改變JUnit的一些其他版本,使用:

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.8</version> 
    <scope>test</scope> 
</dependency> 

編輯3:你應該在測試類路徑是這樣的:

[DEBUG] Test Classpath : 
[DEBUG] /home/icyrock/java/prb/target/test-classes 
[DEBUG] /home/icyrock/java/prb/target/classes 
[DEBUG] /home/icyrock/.m2/repository/junit/junit/4.8/junit-4.8.jar 
[DEBUG] /home/icyrock/.m2/repository/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar 
[DEBUG] /home/icyrock/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar 
[DEBUG] /home/icyrock/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar 

編輯4:OK ,我只是用maven quickstart工件創建了一個測試項目,在裏面添加了兩個模塊(也用快速啓動工件創建),添加了源/目標Java版本和junit:junit:4.8僅依賴於父pom。我只將其中一個測試改爲JUnit4(另一個默認爲JUnit3,這就是quickstart生成的),mvn clean test從父文件夾中工作得很好。

這很可能是一個項目設置問題 - 你能檢查你的項目是否連線正確(即模塊指向父項,組/工件/版本的父/子項目是正確的)。我唯一想到的其他事情是清理你的Maven倉庫(至少org/apache/maven),但我懷疑這會有所幫助。

這也許是明智的測試出一個簡單的項目。

+0

mvn -X顯示較舊的jUnit版本,但它不是我的poms包含它們。我如何刪除它? – ripper234 2010-11-13 19:57:26

+0

只需將junit:junit:4.8作爲依賴關係 - 即如同您想要該版本一樣。我編輯了這篇文章。 – 2010-11-13 19:59:30

+0

謝謝,看到更新的問題。 – ripper234 2010-11-13 20:05:11

2

要完成icyrock.com的問題。如果沒有任何測試類編譯到目標/測試類,那麼檢查你的pom文件並確保包裝不是'pom'。