Maven/Surefire发现没有测试运行

问题描述:

据我所知,测试文件的位置是正确的。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

也许这就是问题:

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

要完成icyrock.com的问题。如果没有任何测试类编译到目标/测试类,那么检查你的pom文件并确保包装不是'pom'。