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

时间:2015-03-31 18:12:36

标签: java unit-testing selenium junit

背景

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


当前代码

我的"验证"方法如此显示(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类

2 个答案:

答案 0 :(得分:1)

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

其他选项是切换到TestNG框架,该框架中已有SoftAssertlatest version

答案 1 :(得分:1)

您可以使用JUnit的ErrorCollector规则。