我使用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)
答案 0 :(得分:2)
您无法开箱即用,因为跳过测试的唯一方法是使用@Ignore
注释。但是,我找到了blog post,这可能正是您所寻找的:
答案 1 :(得分:2)
Spring带来了Ignore注释的另一种变体,它可以在运行时决定是否忽略测试:@IfProfileValue
。结合ProfileValueSource
中用户提供的@ProfileValueSourceConfiguration
,您可以做一些有限的技巧。
但它与能够执行某些测试代码并不相同,并且在测试方法的中间决定忽略测试,正如您可以假设的那样。
答案 2 :(得分:2)
虽然以前的答案本身很好,但我想解决“为什么”这个问题。
问题源于如何计算测试失败/忽略的事实。当添加假设时,通常的计数有点串联(假设可以在测试中途进行测试)。
工具运行者也遇到了问题,导致报告混乱。请参阅here for Surefire dev conversation with JUnit people和here 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>