运行 Junit 5 测试用例时面临以下问题。
CMD:
$ mvn test -Dtest=com.app.AppTest -DskipTests=false
(根据需要仅运行特定的测试文件以及Jdk 1.8.0_232和apache-maven-3.8.6)
错误:
[INFO] --- maven-surefire-plugin:3.0.0-M7:test (default-test) @ projects-test ---
[WARNING] Error injecting: org.apache.maven.plugin.surefire.SurefirePlugin
java.lang.NoClassDefFoundError: org/apache/maven/surefire/api/testset/TestSetFailedException
at java.lang.Class.getDeclaredConstructors0 (Native Method)
at java.lang.Class.privateGetDeclaredConstructors (Class.java:2671)
at java.lang.Class.getDeclaredConstructors (Class.java:2020)
at com.google.inject.spi.InjectionPoint.forConstructorOf (InjectionPoint.java:245)
at com.google.inject.internal.ConstructorBindingImpl.create (ConstructorBindingImpl.java:115)
at com.google.inject.internal.InjectorImpl.createUninitializedBinding (InjectorImpl.java:706)
....
....
....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:03 min
[INFO] Finished at: 2023-04-06T10:58:20+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M7:test (default-test) on project projects-test: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M7:test failed: A required class was missing while executing org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M7:test: org/apache/maven/surefire/api/testset/TestSetFailedException
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M7
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/Users/macusr/.m2/repo/org/apache/maven/plugins/maven-surefire-plugin/3.0.0-M7/maven-surefire-plugin-3.0.0-M7.jar
[ERROR] urls[1] = file:/Users/macusr/.m2/repo/org/apache/maven/surefire/surefire-junit47/2.19.1/surefire-junit47-2.19.1.jar
....
....
....
[ERROR] urls[16] = file:/Users/macusr/.m2/repo/org/ow2/asm/asm/9.2/asm-9.2.jar
[ERROR] urls[17] = file:/Users/macusr/.m2/repo/com/thoughtworks/qdox/qdox/2.0.1/qdox-2.0.1.jar
[ERROR] urls[18] = file:/Users/macusr/.m2/repo/org/apache/maven/surefire/surefire-shared-utils/3.0.0-M7/surefire-shared-utils-3.0.0-M7.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
[ERROR]
[ERROR] -----------------------------------------------------
[ERROR] : org.apache.maven.surefire.api.testset.TestSetFailedException
[ERROR] -> [Help 1]
[ERROR]
Pom.xml
... <!-- Other dependencies -->
...
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>
<!-- TestNG dependency used for separate use-case -->
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-junit5</artifactId>
<version>1.3.1</version>
<scope>test</scope>
</dependency>
<!-- karate-junit5 which has junit-jupiter-api:5.7.2 & junit-jupiter-engine:5.7.2-->
...
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
</plugin>
...
...
之前我们有
maven-surefire-plugin:2.22.2
插件和 karate-junit5:1.3.1
,导致没有测试发现问题
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ fi-functonal-test ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:02 min
[INFO] Finished at: 2023-04-06T11:19:32+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project projects-test: No tests were executed! (Set -DfailIfNoTests=false to ignore this error.) -> [Help 1]
[ERROR]
所以,我们已经转向最新版本的
maven-surefire-plugin:3.0.0-M7
我认为这可能与surefire中的这个问题(当前开放)有关 - https://issues.apache.org/jira/browse/SUREFIRE-1951