我正在尝试使用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");
}
}
}
答案 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
答案 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
。