Java 在使用参数化运行程序运行时,如何使JUnit在运行时忽略特定的测试用例?

Java 在使用参数化运行程序运行时,如何使JUnit在运行时忽略特定的测试用例?,java,junit,ignore,Java,Junit,Ignore,可能重复: 我有一套使用参数化的runner运行的系统测试,我想在不同的环境下运行。有些测试应该只在非生产环境中运行,当在生产环境中运行时,我希望它们被忽略,因此我想说: @Test public void dangerousTest() { if (isProduction(environment)) ignore(); // JUnit doesn't provide ignore() environment.launchMissilesAt(target); as

可能重复:

我有一套使用
参数化的
runner运行的系统测试,我想在不同的环境下运行。有些测试应该只在非生产环境中运行,当在生产环境中运行时,我希望它们被忽略,因此我想说:

@Test
public void dangerousTest() {
    if (isProduction(environment)) ignore(); // JUnit doesn't provide ignore()
    environment.launchMissilesAt(target);
    assertThat(target, is(destroyed()));
}
问题是JUnit没有提供在运行时忽略测试用例的
ignore()
方法。此外,
aspect.assumeTrue(isNotProduction(environment))
似乎不适用于
参数化的运行程序——它只是将测试标记为已通过,而不是被忽略。任何关于如何在以下约束条件下实现等价物的想法:

  • 套件需要使用
    参数化的
    runner
  • 如果套件在生产环境中运行,测试需要显示为已忽略
你可以一直这样做

if (isProduction(environment)) return;
试验将被标记为通过,但至少导弹不会发射

或者您也可以使用,我从未使用过,但记录方式如下:

用于说明的一组方法 关于中的条件的假设 这是一个有意义的测试。失败的 假设并不意味着代码是正确的 坏了,但测试没有提供 有用的信息。默认的JUnit runner将测试视为失败 假设被忽略。定制跑步者 可能会有不同的表现。例如:

因此,您的代码如下所示:

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

  • JUnit的假设并不像您预期的那样有效:
在这个版本中,一个失败的假设 将导致测试被标记为 传递,不管代码是什么 下面的假设可以断言。在里面 未来,这可能会改变,而且 假设失败可能导致测试失败 被忽视:然而,第三方 跑步者目前不允许这样做 选择权

我发现这也与直觉相反,更可怕的是,这种行为在未来可能会改变。我希望他们能一直保持这个特性,直到它按预期工作为止

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


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

在这里看一看可能有帮助是的,但我的要求是JUnit将其标记为忽略。谢谢;我试过了,但我使用的跑步者似乎不尊重
AssumptionViolatedException
s。问题已相应更新。
@Test(groups = "production")
public void dangerousTest() { ... }