Junit 5 在 Maven 构建中执行测试,即使没有注释
Junit 5 performing tests in maven build even when not annotated
在 maven 上准备 发布时 (release:prepare) 我评论了一些我不想执行的测试,但无论如何它们都会被执行,甚至完全删除方法中的 @Test
注释。
注意:考虑到在 Maven 发布期间忽略了 Skip Test 选项
构建是在 Eclipse 下执行的以下环境:
- Apache Maven 3.5.4 外部 运行-时间(不是 Eclipse 中嵌入的那个)
- Java JDK 1.8.0_151
- maven-compiler-plugin 3.0
- maven-release-plugin 2.5.3
- junit-木星-api 5.5.2
- junit-jupiter-engine 5.5.2
通常为了跳过测试我只评论注释:
//@Test
public void testIwantToSkip() {
assertTrue(true);
}
目前我发现跳过测试的唯一方法是注释整个方法,但我希望只注释注释就可以跳过它,就像在 Junit 4 上发生的那样。
更新
我也尝试过使用 @Disable
注释,不幸的是没有结果。示例:
@Test
@Disabled
public void testAuditMapper() {
....
}
可能的解决方案
经过多次测试并感谢 Kayaman 的提示,我发现在 Maven 构建下注释被完全忽略,只有以“test
”开头的方法将被执行,其他的将被完全忽略,无论注释如何。例如:
@Test
public void someThing() {
// will NOT be executed....
}
@Disabled
public void testSomeThing() {
// will be executed....
}
最终解决方案
在我的 pom 的构建部分没有指定 surefire 插件,所以生成的 pom 使用了这个插件的 2.12.4 版本。通过在构建部分添加:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
一切正常。感谢@asa 的提示。
尝试使用@Ignore 注释。
@Test
@Ignore("optional comment explaning the reason")
public void testIwantToSkip() {
assertTrue(true);
}
关于您的备注:
对于发布插件,您需要间接指定内部构建的所有选项,方法是将它们包装到
-Darguments="..."
如果您在 release:perform 目标期间遇到问题,您将无法更改 java class。
通常,执行目标采用 release:prepare 阶段期间在您的 SCM 中提交的 class。
您在此阶段唯一的选择是在执行阶段禁用所有测试或回滚准备目标的提交并使用 Junit5 的条件测试功能来调节它们的执行。
更新的解决方案:
maven 项目使用的是默认版本的 surefire 插件(用于单元测试),而不是解决 JUnit 5 一些问题的更新版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
注意:使用以下插件非常方便地确保项目使用最新版本的依赖项,但最重要的是最新构建的依赖项:
在 maven 上准备 发布时 (release:prepare) 我评论了一些我不想执行的测试,但无论如何它们都会被执行,甚至完全删除方法中的 @Test
注释。
注意:考虑到在 Maven 发布期间忽略了 Skip Test 选项
构建是在 Eclipse 下执行的以下环境:
- Apache Maven 3.5.4 外部 运行-时间(不是 Eclipse 中嵌入的那个)
- Java JDK 1.8.0_151
- maven-compiler-plugin 3.0
- maven-release-plugin 2.5.3
- junit-木星-api 5.5.2
- junit-jupiter-engine 5.5.2
通常为了跳过测试我只评论注释:
//@Test
public void testIwantToSkip() {
assertTrue(true);
}
目前我发现跳过测试的唯一方法是注释整个方法,但我希望只注释注释就可以跳过它,就像在 Junit 4 上发生的那样。
更新
我也尝试过使用 @Disable
注释,不幸的是没有结果。示例:
@Test
@Disabled
public void testAuditMapper() {
....
}
可能的解决方案
经过多次测试并感谢 Kayaman 的提示,我发现在 Maven 构建下注释被完全忽略,只有以“test
”开头的方法将被执行,其他的将被完全忽略,无论注释如何。例如:
@Test
public void someThing() {
// will NOT be executed....
}
@Disabled
public void testSomeThing() {
// will be executed....
}
最终解决方案
在我的 pom 的构建部分没有指定 surefire 插件,所以生成的 pom 使用了这个插件的 2.12.4 版本。通过在构建部分添加:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
一切正常。感谢@asa 的提示。
尝试使用@Ignore 注释。
@Test
@Ignore("optional comment explaning the reason")
public void testIwantToSkip() {
assertTrue(true);
}
关于您的备注:
对于发布插件,您需要间接指定内部构建的所有选项,方法是将它们包装到
-Darguments="..."
如果您在 release:perform 目标期间遇到问题,您将无法更改 java class。 通常,执行目标采用 release:prepare 阶段期间在您的 SCM 中提交的 class。 您在此阶段唯一的选择是在执行阶段禁用所有测试或回滚准备目标的提交并使用 Junit5 的条件测试功能来调节它们的执行。
更新的解决方案:
maven 项目使用的是默认版本的 surefire 插件(用于单元测试),而不是解决 JUnit 5 一些问题的更新版本。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
注意:使用以下插件非常方便地确保项目使用最新版本的依赖项,但最重要的是最新构建的依赖项: