【问题标题】:Purposefully failing a JUnit test upon method completion在方法完成时故意使 JUnit 测试失败
【发布时间】:2015-03-31 18:12:36
【问题描述】:

背景

我正在使用 Selenium/Junit 测试环境,并且我想实现一个类来执行“软断言”:这意味着我希望它记录断言是否通过,但实际上在测试用例之前不会失败,直到我明确告诉它验证断言。这样我可以检查一个页面上的多个字段并记录所有不匹配的字段。


当前代码

我的“验证”方法显示为这样(assertTrue/assertFalse 存在类似的方法):

public static void verifyEquals(Object expected, Object actual) {
    try {
        assertEquals(expected, actual);
    } catch (Throwable e) {
        verificationFailuresList.add(e);
    }
}

验证完所有字段后,我调用以下方法:

public static void checkAllPassed() {
    if (!verificationFailuresList.isEmpty()) {
        for (Throwable failureThrowable : verificationFailuresList) {
            log.error("Verification failure:" + failureThrowable.getMessage(), failureThrowable);
            // assertTrue(false);
        }
    }
}

问题

目前,我目前只是使用assertTrue(false) 作为一种快速失败测试用例的方法;但是,这会使日志因无意义的故障而变得混乱,并将真正的问题推得更远。有没有一种更简洁的方法来故意使 JUnit 测试用例失败?如果没有,是否有更好的解决方案来实现软断言?我知道article 的实现非常好,但据我所知,JUnit 不等同于 IInvokedMethodListener 类

【问题讨论】:

标签: java unit-testing selenium junit


【解决方案1】:

如果你想故意让 JUnit 测试失败,你应该使用 org.junit.Assert.fail()

其他选项是切换到 TestNG 框架,它的 latest version 中已经有一个 SoftAssert 类。

【讨论】:

    【解决方案2】:

    您可以使用 JUnit 的 ErrorCollector 规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多