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

nar*_*thi 6 java junit ignore

可能重复:
有条件地忽略JUnit 4中的测试

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

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

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

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

JB *_*zet 5

你可以随时做

if (isProduction(environment)) return;
Run Code Online (Sandbox Code Playgroud)

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

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

一组方法,用于说明关于测试有意义的条件的假设.失败的假设并不意味着代码被破坏,而是测试没有提供有用的信息.默认的JUnit运行器将失败假设的测试视为忽略.自定义跑步者可能表现不同.例如:

你的代码看起来像这样:

@Test
public void dangerousTest() {
    assumeTrue(!isProduction(environment));
    // ...
}
Run Code Online (Sandbox Code Playgroud)