为什么因假设失败而跳过的junit测试未报告为跳过?

时间:2010-09-28 16:31:46

标签: java maven-2 junit maven junit4

我使用junit假设来决定是否进行测试 假设失败的测试由junit框架ignored/skipped进行。

我想知道为什么跳过的测试没有被报告为'跳过'?

请看一下示例:

import static org.junit.Assert.fail;
import org.junit.Assume;
import org.junit.Test;

public class AssumptionTest {

    @Test
    public void skipAssumptionFailureTest() {
        Assume.assumeTrue("foo".equals("bar"));
        fail("This should not be reached!");
    }
}

在maven项目中运行此测试会导致:

Running AssumptionTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec

我希望将此测试报告为“已跳过”。有没有机会实现这个目标?

(junit 4.8.1; maven 2.2.1; java 1.6.0_21)

4 个答案:

答案 0 :(得分:2)

您无法开箱即用,因为跳过测试的唯一方法是使用@Ignore注释。但是,我找到了blog post,这可能正是您所寻找的:

答案 1 :(得分:2)

Spring带来了Ignore注释的另一种变体,它可以在运行时决定是否忽略测试:@IfProfileValue。结合ProfileValueSource中用户提供的@ProfileValueSourceConfiguration,您可以做一些有限的技巧。

请参阅Spring Test Documentation

但它与能够执行某些测试代码并不相同,并且在测试方法的中间决定忽略测试,正如您可以假设的那样。

答案 2 :(得分:2)

虽然以前的答案本身很好,但我想解决“为什么”这个问题。

问题源于如何计算测试失败/忽略的事实。当添加假设时,通常的计数有点串联(假设可以在测试中途进行测试)。

工具运行者也遇到了问题,导致报告混乱。请参阅here for Surefire dev conversation with JUnit peoplehere for related Eclipse bug

现在这在Maven中不是问题,它不应该是更新的日食。我使用基于eclipse.buildId = 2.9.2.201205071000-RELEASE的STS,我仍然会遇到这种情况。

编辑:引用类型链接不起作用。

答案 3 :(得分:0)

在 maven 上,解决方案非常简单,只需在 pom.xml 的插件部分添加它即可!

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.0.0-M5</version>           
</plugin>