Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么因为假设失败而被跳过的junit测试没有被报告为已跳过?_Java_Maven 2_Junit_Maven_Junit4 - Fatal编程技术网

Java 为什么因为假设失败而被跳过的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假设来决定是否运行测试。
假设失败的测试由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
扩展为不运行,而不是忽略。如果它的结果是在詹金斯,这主要是重要的。