【发布时间】:2019-10-02 07:41:13
【问题描述】:
在准备 在 maven 上发布(release:prepare)时,我评论了一些我不想执行的测试,但它们无论如何都会执行,甚至完全执行从方法中删除 @Test 注释。
注意:请考虑在 maven 发布期间忽略跳过测试选项
构建是在 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-jupiter-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 的提示。
【问题讨论】:
-
你在注释掉测试后是否重新编译了项目?
-
当然,我也尝试执行干净+安装目标,没有跳过测试选项,并且无论如何都会执行注释测试。我认为 Junit5 对公共方法进行自省,并将其视为测试,而不考虑注释。
-
如果您将方法重命名为
iWantToSkip(),它还会运行吗?过去,测试方法由方法开头的test标识,因此这可能是向后兼容性问题。也许可以在配置中禁用它。 -
它们是 built 还是 run?
-
@Raedwald 我想我现在得到了你的问题:如果我直接作为 Junit 运行测试,它可以正常工作,评论测试注释和使用禁用注释。它仅在 Maven 构建下“失败”