在方法完成时故意使 JUnit 测试失败

Purposefully failing a JUnit test upon method completion

背景

我正在使用 Selenium/Junit 测试环境,我想实现一个 class 来执行 "soft asserts": 意思是我希望它记录断言是否通过,但在我明确告诉它验证断言之前,测试用例实际上并没有失败。这样我就可以检查页面上的多个字段并记录所有不匹配的字段。


当前代码

我的 "verify" 方法如此显示(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 class

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

另一种选择是切换到 TestNG 框架,该框架在 latest version.

中已有 SoftAssert class

您可以使用 JUnit 的 ErrorCollector 规则。