Maven/Surefire 发现没有要运行的测试

2022-09-03 02:45:30

据我所知,测试文件位置是正确的。

当我运行“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。哎呀。


答案 1

也许这就是问题所在:

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:好的,我刚刚使用 maven 快速入门工件创建了一个测试项目,在内部添加了两个模块(也是使用快速入门工件创建的),将源/目标 Java 版本和 junit:junit:4.8 依赖项添加到父 pom。我只将其中一个测试更改为 JUnit4(另一个测试默认为 JUnit3,这是快速入门生成的),从父文件夹工作正常。mvn clean test

这很可能是一个项目设置问题 - 您可以检查您的项目是否正确连接(即模块指向父级,父/子项目的组/工件/版本是否正确)。我唯一想到的另一件事是清理你的maven存储库(至少是org/apache/maven),但我怀疑这是否会有所帮助。

在更简单的项目上进行测试可能是明智的。


答案 2

为了结束冰.com的问题。如果没有任何测试类编译为目标/测试类,请检查您的pom文件并确保打包不是“pom”。


推荐