Java 为什么因为假设失败而被跳过的junit测试没有被报告为已跳过?
我使用junit假设来决定是否运行测试。Java 为什么因为假设失败而被跳过的junit测试没有被报告为已跳过?,java,maven-2,junit,maven,junit4,Java,Maven 2,Junit,Maven,Junit4,我使用junit假设来决定是否运行测试。 假设失败的测试由junit框架进行 我想知道为什么跳过的测试不被报告为“跳过” 请看一看示例: import static org.junit.Assert.fail; import org.junit.Assume; import org.junit.Test; public class AssumptionTest { @Test public void skipAssumptionFailureTest() {
假设失败的测试由junit框架进行 我想知道为什么跳过的测试不被报告为“跳过” 请看一看示例:
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)您不能开箱即用,因为跳过测试的唯一方法是使用
@Ignore
注释。然而,我发现了一个可能正是您想要的:Spring带来了另一个Ignore注释的变体,它能够在运行时决定是否忽略测试:@IfProfileValue
。结合用户在@ProfileValueSourceConfiguration
中提供的ProfileValueSource
,您可以执行一些有限的技巧
看
但它与执行一些测试代码不一样,在测试方法的中间,假设忽略了测试,正如假设的那样。
< P>以前的答案是好的,我想解决“为什么”问题。 问题源于测试失败/忽略的计数方式。当添加假设时,通常的计数有点扭曲(假设可以在运行的中途忽略测试) Tools Runner在这方面也有问题,导致报告混乱。看,还有 现在这在Maven不是问题,也不应该出现在较新的日食中。我使用基于eclipse.buildId=2.9.2.201205071000-RELEASE的STS,我仍然体验到这种行为编辑:引用类型链接不起作用 在maven上,解决方案非常简单,只需在pom.xml中添加这个插件部分
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
</plugin>
org.apache.maven.plugins
maven surefire插件
3.0.0-M5
感谢您的回复。太糟糕了,这不是开箱即用的。实现自定义运行程序对我来说不起作用-我通常已经在测试中使用了自定义运行程序(SpringJUnit4ClassRunner),我不会扩展它。我更喜欢内置解决方案。请添加博客文章中的重要部分作为答案,否则一旦该博客文章消失,该答案将毫无用处。(令人印象深刻的是,在过去的7年中,没有人提到过这一点)事实上,尽管博客帖子在那里,但它引用的代码已经很久没有了。注意:Spring@IfProfileValue
只有在名称和值不匹配并且没有运行时才会跳过/忽略测试。如果您想用它实现JUnit类别类型的实现,您可能需要将SpringJUnit4ClassRunner#runChild
扩展为不运行,而不是忽略。如果它的结果是在詹金斯,这主要是重要的。