有条件地忽略JUnit 4中的测试

问题:

好的,所以@Ignore注释对于标记不应该运行测试用例很有用。
但是,有时我想忽略基于运行时信息的测试。一个例子可能是,如果我有一个并发测试,需要在一定数量的内核的机器上运行。如果这个测试是在单处理器机器上运行的,我不认为通过测试是不正确的(因为它没有被运行),而且测试失败并打破构建是不正确的。
所以我想在运行时能够忽略测试,因为这似乎是正确的结果(因为测试框架将允许构建通过但记录测试没有运行)。我很确定注释不会给我这个灵活性,并且怀疑我需要为有问题的类手动创建测试套件。但是,文档并没有提到任何关于这一点的内容,并且通过API来看,还不清楚如何以编程方式完成(即如何以编程方式创建Test或类似的实例,相当于由@Ignore注释?)。
如果任何人过去做过类似的事情,或者有一个明智的想法,我可以如何去做,我很乐意听到。

回答:

JUnit的方式是在运行时这样做是org.junit.Assume

 @Before
 public void beforeMethod() {
     org.junit.Assume.assumeTrue(someCondition());
     // rest of setup.
 }

您可以在@Before方法或测试本身中执行,但不能在@After方法中执行此操作。如果您在测试中执行此操作,您的@Before方法将会运行。
 假设失败导致测试被忽略。
 编辑:要与junit-ext@RunIf注释进行比较,他们的示例代码如下所示:

@Test
public void calculateTotalSalary() {
    assumeThat(Database.connect(), is(notNull()));
    //test code below.
}

更不用说以这种方式捕获和使用Database.connect()方法的连接容易得多。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Conditionally ignoring tests in JUnit 4

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

61 − = 54