2011-07-05 75 views
5

可能重复:
Conditionally ignoring tests in JUnit 4如何让JUnit在使用参数化运行器运行时忽略运行时的特定测试用例?

我的系统测试套件,与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亚军
  • 该项测试需要,如果出现套房在生产环境中运行的忽略?
+0

看看这里也许它有帮助http://stackoverflow.com/questions/817135/grouping-junit-tests –

回答

5

你总是可以做

if (isProduction(environment)) return; 

测试将被标记为过,但至少导弹将无法启动。

或者你可以使用Assume,这是我从来没有用过,但记录是这样的:

一组数据来描述有关 的条件,测试是有意义的 假设有用的方法。一个失败的 假设并不意味着代码是 损坏,但该测试没有提供 有用的信息。默认JUnit 跑步者将忽略的假设条件为 的测试视为忽略。定制跑步者 可能会有不同的表现。例如:

因此,你的代码应该是这样的:

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

是的,但我的要求是它被标记为被JUnit忽略。 –

+0

看到我已编辑的答案 –

+0

谢谢;我尝试过,但似乎我使用的跑步者并不尊重'AssumptionViolatedException's。问题相应更新。 –

1

两点:

在此版本中,失败的假设 将导致测试被标记为 合格,而不管假设下方的代码 是否可以断言。在未来,这可能会改变,并且一个不合格的假设可能会导致测试 被忽略:但是,第三方 跑步者当前不允许此 选项。

我觉得这非常直观,甚至更可怕的是这种行为在将来可能会改变。我希望他们能够保持这一特色,直到它按预期工作。

  • 如果使用TestNG是一个选项,您可以使用这个组。把你的测试方法“生产”组中:

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

,当你运行你的测试,排除集团“生产”。

相关问题