当前位置: 首页 > 知识库问答 >
问题:

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

越狐若
2023-03-14

我正在尝试使用JUnit错误收集器报告错误。虽然我的断言失败了,但JUnit中并没有报告错误。但我在控制台中收到了“错误”信息。

@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个答案

凌展
2023-03-14

Cucumber运行程序不支持@规则,因为它扩展了家长运行程序而不是BlockJUnit4ClassRunner(请参阅运行程序的源代码)。支持ErrorCollector已经存在问题。

訾晋
2023-03-14

据JUnit称:

错误收集规则允许在发现第一个问题后继续执行测试

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

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

你应该加上:

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

参见示例:

https://junit.org/junit4/javadoc/4.12/org/junit/rules/ErrorCollector.html(更新)

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

邢献
2023-03-14

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

当我将JUnit4与IntelliJ IDEA一起使用时,我也遇到了类似的问题。我在对话框中天真地选择了一个基类TestCase,这是JUnit 3的默认值,因为我想“如果有这些方便的this#assert*方法就好了”(JUnit 4的默认值为null)。错误代码(不起作用)如下:

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

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

然而,在JUnit4中,这使许多功能无法工作。移除父类修复了测试:

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

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

另一个答案中@StefanBirkner提到的cucumber问题中的一条评论向我提出了解决方案。读了这篇文章后,我尝试扩展ErrorCollector,使ErrorCollector#verify公开,并从@After方法调用它,但没有调用@After方法,这让我意识到TestRunner(这是IntelliJ的默认设置)或测试本身出了问题。

 类似资料:
  • 问题内容: ABstractMethodError的可能原因是什么? 线程“ pool-1-thread-1”中的异常java.lang.AbstractMethodError: 问题答案: 简单的答案是这样的:一些代码试图调用一个声明的方法。抽象方法没有主体,无法执行。由于您提供的信息很少,因此我无法真正详细说明如何发生这种情况,因为编译器通常会遇到此问题- 如此处所述,这意味着该类必须在运行时

  • 书上说这段代码在目录被glob匹配的情况下(如node_modules/fs.stat)应该报错,但是我在本地执行没有。 下面代码实现了一个copy的功能,将source directory下的所有文件复制到destination directory。 对这段代码的几点说明: 此处的glob版本为7.2.3,最新版本的glob是基于promise的,不再支持回调。 fs-extra提供了更多的功能

  • 它仍然打印出10个“*”,但后来我得到了这个错误: 但是如果我使用hasNext而不是hasNextLine,它可以正常工作。 所以我想知道为什么hasNext有效,而hasNextLine无效。

  • 错误日志对于发现程序中的错误是非常有帮助的,但是有些时候它也会将应用程序的结构暴露给外部。为了有效的保护你的应用程序不受到由此而引发的问题。你需要将在你的服务器上使用开发和生产(线上)两套不同的配置。 开发环境 为了在开发环境中显示所有可能的错误,将你的 php.ini 进行如下配置: display_errors = On display_startup_errors = On error_re

  • 问题内容: 请问为什么第13行中的错误是未报告的异常,必须在声明声明为pr的情况下将其捕获 问题答案: 您需要向引发异常的方法中添加一个,如上所述,以及调用该方法的所有方法