如何在JUnit5中管理失败的测试

4
我正在迁移到JUnit5,想知道是否有一种类似于JUnit4中的TestWatcher的简单方法来判断测试是否失败。我进行了一些研究并发现了类似的但是未解决的问题,例如:https://github.com/junit-team/junit5/issues/542。由于大多数问题都比较老,所以我想问一下是否有最近的解决方案。我的想法是能够截屏或在日志中添加一些消息。那么,是否有监听器或扩展或其他快速允许我管理webdriver测试的失败/通过/跳过的方法呢?谢谢!

JUnit5 对这个特性的处理方式是创建一个扩展,下面是一个示例,展示了 JUnit5 中与 JUnit 4 的 TestWatcher 等效的代码:codedocs。免责声明:我是包含此 watcher 实现的扩展库的作者。 - glytching
1个回答

3

好的,谢谢glytching。这比我想象的要难,但最终完成了。正如你指出的那样,我们需要创建一个外部类(例如WatcherExtension),实现BeforeTestExecutionCallbackAfterTestExecutionCallback,然后使用扩展提供的上下文来评估异常。在这个类中,我们可以添加类似于以下内容的代码:

@Override
public void afterTestExecution(ExtensionContext extensionContext) throws Exception {
    Method testMethod = extensionContext.getRequiredTestMethod();
    Boolean testFailed = extensionContext.getExecutionException().isPresent();
    if (testFailed) {
        if (!TESTDATA.excluded.contains(testMethod.getName())) {
            takeScreenshot(testMethod);
            logErrorMessage("Test " + testMethod.getName() + " failed on " + getAppVersion() + " using " + TESTDATA.browser);
        } else {
            logInfoMessage("Test " + testMethod.getName() + " was skipped on " + getAppVersion() + " using " + TESTDATA.browser);
        }
    } else {
        logInfoMessage(testMethod.getName() + " was successfully executed on " + getAppVersion() + " using " + TESTDATA.browser);
    }

最后,您需要将此注释添加到您的测试类中:
@ExtendWith(WatcherExtension.class)
public class MyTest extends TestFactory {
    @Test
    public void testMyTest() { //whatever  }
}

个人认为,这是一项非常基础的功能,应该在JUnit5的未来版本中直接实现。 谢谢!


FYI:JUnit Jupiter正在积极开展工作,以实现类似的功能:https://github.com/junit-team/junit5/pull/1393 - Sam Brannen
谢谢Sam!知道你在这个问题后面真是太好了。我会关注它的进展。再次感谢你的出色工作。 - jmrg82
2
请查看 https://dev59.com/k1UM5IYBdhLWcg3wSexQ#54690217,以获取使用最新的JUnit5实现版本的代码。 - Alexis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接