在使用Parameterized runner运行时,如何使JUnit在运行时忽略特定的测试用例?

时间:2011-07-05 14:07:49

标签: java junit ignore

  

可能重复:
  Conditionally ignoring tests in JUnit 4

我有一套与Parameterized跑步者一起运行的系统测试,我希望针对不同的环境运行。有些测试只能在非生产环境中运行,而且在生产中运行时我希望看到它们被忽略,所以我正在寻找一种说法:

@Test
public void dangerousTest() {
    if (isProduction(environment)) ignore(); // JUnit doesn't provide ignore()
    environment.launchMissilesAt(target);
    assertThat(target, is(destroyed()));
}

问题是JUnit没有提供ignore()方法来在运行时忽略测试用例。此外,Assume.assumeTrue(isNotProduction(environment))似乎不适用于Parameterized跑步者 - 它只是将测试标记为已通过,而不是被忽略。任何想法如何通过以下约束来实现等价物:

  • 该套件需要使用Parameterized runner
  • 如果套件在生产中运行,测试需要显示为忽略?

2 个答案:

答案 0 :(得分:5)

你可以随时

if (isProduction(environment)) return;

测试将标记为已通过,但至少不会发射导弹。

或者您可以使用我从未使用过的Assume,但是会以这种方式记录:

  

一组有用的陈述方法   关于条件的假设   哪个测试有意义。失败了   假设并不代表代码   破了,但测试没有提供   有用的信息。默认的JUnit   跑步者对待失败的测试   假设被忽略了。自定义跑步者   可能表现不同。例如:

您的代码看起来像这样:

@Test
public void dangerousTest() {
    assumeTrue(!isProduction(environment));
    // ...
}

答案 1 :(得分:0)

两点:

  

有了这个版本,一个失败的假设   将导致测试被标记为   传递,不管代码是什么   低于假设可以断言。在   未来,这可能会改变,而且   失败的假设可能会导致测试   被忽略:然而,第三方   跑步者目前不允许这样做   选项。

我发现这也非常直观,更令人恐惧的是,这种行为将来可能会发生变化。我希望他们能够抓住这个功能,直到它按预期工作。

  • 如果使用TestNG是一个选项,则可以使用组来实现此目的。将您的测试方法放在“生产”组中:

    @Test(groups = "production")
    public void dangerousTest() { ... }
    

当您运行测试时,请排除“生产”组。