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

How to manage failed tests in JUnit5

我正在迁移到 JUnit5,我想知道 JUnit5 中是否有一种简单的方法来知道测试何时失败,就像我们在 JUnit4 中使用 TestWatcher 时一样。

我做了一些研究,发现了类似但开放的问题,比如这个: https://github.com/junit-team/junit5/issues/542 由于它们中的大多数都已经很老了,所以我想问一下,以防万一有最新的解决方案。

我的想法是能够截屏或在我的日志中添加一些消息。那么,是否有侦听器或扩展程序或其他东西可以让我快速管理 webdriver 测试的 failure/pass/skip? 提前致谢!

好的,谢谢glytching。 这比我想象的要难,但终于做到了。正如您指出的那样,我们需要创建一个外部 class(例如 WatcherExtension)来实现 BeforeTestExecutionCallbackAfterTestExecutionCallback,然后 使用给定的上下文评估异常通过扩展 。 在此 class 中,我们可以添加如下内容:

@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);
    }

最后,您需要将此注释添加到您的测试中 classes:

@ExtendWith(WatcherExtension.class)
public class MyTest extends TestFactory {
    @Test
    public void testMyTest() { //whatever  }
}

就我个人而言,我认为这是非常基础的东西,应该在未来的版本中由 JUnit5 直接实现。 谢谢!