使用Maven命令行强制运行@ Ignore'd JUnit测试

时间:2013-12-17 14:56:14

标签: maven junit

我有一个带有@Ignore属性的JUnit测试,例如 -

public class HealthCareGov
{
    @Test
    @Ignore
    public void performancetest()
    {
        // stuff
    }
}

在大多数IDE(例如IntelliJ)中,即使存在@Ignore属性,也可以通过选择方法名称来强制运行此测试。我猜Eclipse也允许这个吗?

但是,当我尝试通过执行以下操作在Maven中执行相同的操作时 -

mvn -Dtest=HealthCareGov#performancetest test

看来Maven跳过了测试。这是输出 -

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running HealthCareGov
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.032 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 1

我可以使用什么Maven命令行来强制执行此测试以重现我的IDE生成的行为?修改Java源代码不是一种选择。

2 个答案:

答案 0 :(得分:7)

这可以添加到测试中。

@IfProfileValue(name="test-profile", value="IntegrationTest")
public class PendingChangesITCase extends AbstractControllerIntegrationTest {
    ...
}

要选择要执行的测试,只需将值添加到配置文件以执行集成测试。

<properties>
    <test-profile>IntegrationTest</test-profile>
</properties>

此外,您可以使用命令行设置测试配置文件变量:

mvn -Dtest-profile=IntegrationTest

答案 1 :(得分:1)

我没有覆盖@Ignore注释,而是执行了以下操作:

  • 将您希望仅从标准maven测试运行器命名法(surefirefailsafe)之外的命令行运行的测试命名。这将确保您的测试不会被正常的maven生命周期测试执行所吸引。
  • 正常编写测试,在测试方法中包含框架注释。
  • 当您希望运行测试时,只需将其作为参数提供给跑步者即可手动包含。

    -Dtest=Foo # for surefire

    -Dit.test=Foo # for failsafe

如果要运行它,将强制您通过命令行参数手动指定测试,否则将省略测试。