为什么我的JUnit错误收集器没有报告错误?

时间:2015-07-16 00:29:22

标签: java junit

我正在尝试使用JUnit错误收集器报告错误。虽然我的断言失败,但JUnit中没有报告错误。但是我得到了#34;错误"控制台中的消息。

@Rule
public ErrorCollector errcol = new ErrorCollector();

@Then("^Business alert message on the screen$")
public void Business_alert_message_on_the_screen(Result_Update) throws Throwable {
    if (userType.equals("Admin")) {
        try {
            Assert.assertEquals("Update button is not present for the admin user", true, Result_Update);

        } catch (Throwable t) {
            errcol.addError(t);
            System.out.println("Error");
        }
     }
}

3 个答案:

答案 0 :(得分:1)

根据JUnit:

  

ErrorCollector规则允许执行测试后继续   找到第一个问题

 errcol.addError(t);//only adds the error to the ErrorCollector

这意味着在收集错误后测试仍在继续。

你应该添加:

 errcol.checkThat(...); //will pass/fail the test

参见示例:

http://junit.org/apidocs/org/junit/rules/ErrorCollector.html

https://gist.github.com/cb372/2419626

答案 1 :(得分:1)

  

tl; dr :确保您的测试类不会扩展TestCase

当我使用带有IntelliJ IDEA的JUnit 4时,我遇到了类似的问题。我天真地在对话框中选择了TestCase的基类,这是JUnit 3的默认基础类,因为我认为“使用那些方便的this#assert*方法会很好”(JUnit 4的默认值)一片空白)。坏代码(不起作用)如下:

public class SassCompilerTest extends TestCase {
    @Rule
    public ErrorCollector collector = new ErrorCollector();

    @Test
    public void testCompiler() throws IOException {
        collector.checkThat(true, CoreMatchers.equalTo(false));
    }
}

然而,在JUnit 4中,这阻止了许多功能的运行。删除父类修复了测试:

public class SassCompilerTest {
    @Rule
    public ErrorCollector collector = new ErrorCollector();

    @Test
    public void testCompiler() throws IOException {
        collector.checkThat(true, CoreMatchers.equalTo(false));
    }
}

在@StefanBirkner在另一个答案中提到的Cucumber问题中comment向我建议了解决方案。阅读完之后,我尝试扩展ErrorCollector以使ErrorCollector#verify公开,并使用@After方法调用它,但@After方法未被调用,这使我意识到TestRunner(这是IntelliJ的默认值)或Test本身的错误。

答案 2 :(得分:0)

Cucumber亚军不支持@Rule,因为它会延伸ParentRunner而非BlockJUnit4ClassRunner(请参阅source code of the runner)。已有issue for supporting ErrorCollector