Maven/Surefire 找不到要运行的测试
Posted
技术标签:
【中文标题】Maven/Surefire 找不到要运行的测试【英文标题】:Maven/Surefire finds no tests to run 【发布时间】:2011-05-09 15:00:15 【问题描述】:据我所知,测试文件的位置是正确的。
当我运行“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) 和我的测试类。
Edit 3 - 我有一个名为 SomethingTester 的测试类。当我将其更改为SomethingTest时,它起作用了。我检查了 Surefire 的包含模式,确实它没有被配置为捕获Something Tester。呵呵。
【问题讨论】:
这看起来很奇怪。你能发布你的 pom.xml 吗? @seanizer - 你看到编辑 3 了吗?我的检测测试模式根本没有正确配置。 哦,我明白了,那么您应该将其添加为答案并接受它 @seanizer - 我添加了这个作为答案,我还不能接受(我讨厌这个事实 - 我必须等待 2 天)。 我找到了很好的答案。 ***.com/questions/6178583/… 【参考方案1】:也许这就是问题所在:
https://***.com/questions/2021771?sort=newest#sort-topmvn -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:好的,我刚刚使用 maven quickstart artifact 创建了一个测试项目,在内部添加了两个模块(也是使用 quickstart artifact 创建的),仅向父 pom 添加了源/目标 Java 版本和 junit:junit:4.8 依赖项。我只将其中一项测试更改为 JUnit4(另一项默认为 JUnit3,这是 quickstart 生成的),父文件夹中的 mvn clean test
工作得很好。
这很可能是项目设置问题 - 您能否检查您的项目是否连接正确(即模块指向父项目,父/子项目的组/工件/版本是否正确)。我想到的唯一另一件事是清理您的 maven 存储库(至少是 org/apache/maven),但我怀疑这会有所帮助。
在一个更简单的项目上进行测试可能是明智的。
【讨论】:
mvn -X 显示较旧的 jUnit 版本,但是我的 poms 不包含它们。如何删除它? 只需添加 junit:junit:4.8 作为依赖项 - 即好像你想要那个版本。我编辑了帖子。 检索正常,在“T E S T S”行上方的“Test Classpath”部分是什么意思?如果配置正常,我将进行编辑以指定它应该做什么。 顺便说一句,“root pom”是什么意思?那是相关项目的 pom 还是其他 pom? 确认一下,您的测试课程在src/test/java
文件夹中?你能检查一下target/test-classes
中有.class文件吗?【参考方案2】:
完成 icyrock.com 的问题。如果没有编译到目标/测试类的任何测试类,请检查您的 pom 文件并确保打包不是“pom”。
【讨论】:
【参考方案3】:检查你当前版本的 JUnit 是否在 Maven 存储库中仍然可用,否则会失败
这个答案的当前版本@time是
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
【讨论】:
以上是关于Maven/Surefire 找不到要运行的测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Maven surefire 排除具有给定类别的所有 JUnit4 测试?
使用 Maven Surefire 运行依赖项 jar 中包含的 JUnit 测试
Maven Surefire 插件没有重新运行失败的 Cucumber 测试