Maven 默默地找不到 运行 的 JUnit 测试
Maven silently fails to find JUnit tests to run
我在 IntelliJ 中打开了一个新的 Java 项目,使用 Maven 作为构建工具,目前有一个 class 和一个 JUnit 5 测试 class。当我将 IntelliJ 单独或一起进行 运行 测试时,它会起作用。但是,当我转到终端并点击 mvn clean test
或从 IntelliJ 中的 Maven 窗格执行相同操作时,它会跳过测试。
然而,与 the questioner with this similar question 不同的是,我没有收到任何错误消息。测试 class 找到 并且 确实 编译。我没有遇到与他相同的问题(文件命名不正确)。
编辑:Whosebug 问我为什么这不是 的副本。它是同样的问题,但他们的解决方案(从 2016 年开始)不再正确。您不再需要添加 "provider" 依赖项。
这是我的 Maven 输出的相关部分:
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ markovmodels ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\joe\foo\markovmodels\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ markovmodels ---
[INFO] Surefire report directory: C:\Users\joe\foo\markovmodels\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.648 s
[INFO] Finished at: 2019-08-13T09:02:53-04:00
[INFO] ------------------------------------------------------------------------
我不知道这是否是一个有用的线索,但我观察到没有创建 target/surefire-reports
目录。
在 pom.xml
我有这两个与测试相关的依赖项:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
它们是直接从另一个有效的项目中复制过来的。我没有指定 Surefire 插件的版本或更改其任何默认值,因此有效的 POM 与我的其他项目相同(它使用 maven-surefire-plugin
版本 2.12.4)。测试源文件似乎在正确的目录中并且具有正确的命名约定。 我可能犯了什么错误?
当前状态下的代码可以是here on Github。
这是 maven-surefire-plugin
的问题
maven-surefire-plugin
的默认版本有问题,我可以通过升级来修复它。我通过从 JUnit5 sample Maven project on Github:
复制相关部分解决了这个问题
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>
我在 IntelliJ 中打开了一个新的 Java 项目,使用 Maven 作为构建工具,目前有一个 class 和一个 JUnit 5 测试 class。当我将 IntelliJ 单独或一起进行 运行 测试时,它会起作用。但是,当我转到终端并点击 mvn clean test
或从 IntelliJ 中的 Maven 窗格执行相同操作时,它会跳过测试。
然而,与 the questioner with this similar question 不同的是,我没有收到任何错误消息。测试 class 找到 并且 确实 编译。我没有遇到与他相同的问题(文件命名不正确)。
编辑:Whosebug 问我为什么这不是
这是我的 Maven 输出的相关部分:
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ markovmodels ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Users\joe\foo\markovmodels\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ markovmodels ---
[INFO] Surefire report directory: C:\Users\joe\foo\markovmodels\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.648 s
[INFO] Finished at: 2019-08-13T09:02:53-04:00
[INFO] ------------------------------------------------------------------------
我不知道这是否是一个有用的线索,但我观察到没有创建 target/surefire-reports
目录。
在 pom.xml
我有这两个与测试相关的依赖项:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
它们是直接从另一个有效的项目中复制过来的。我没有指定 Surefire 插件的版本或更改其任何默认值,因此有效的 POM 与我的其他项目相同(它使用 maven-surefire-plugin
版本 2.12.4)。测试源文件似乎在正确的目录中并且具有正确的命名约定。 我可能犯了什么错误?
当前状态下的代码可以是here on Github。
这是 maven-surefire-plugin
的问题
maven-surefire-plugin
的默认版本有问题,我可以通过升级来修复它。我通过从 JUnit5 sample Maven project on Github:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
</plugins>
</build>