我正在迁移到JUnit5,想知道是否有一种类似于JUnit4中的TestWatcher的简单方法来判断测试是否失败。我进行了一些研究并发现了类似的但是未解决的问题,例如:https://github.com/junit-team/junit5/issues/542。由于大多数问题都比较老,所以我想问一下是否有最近的解决方案。我的想法是能够截屏或在日志中添加一些消息。那么,是否有监听器或扩展或其他快速允许我管理webdriver测试的失败/通过/跳过的方法呢?谢谢!
好的,谢谢glytching。这比我想象的要难,但最终完成了。正如你指出的那样,我们需要创建一个外部类(例如WatcherExtension
),实现BeforeTestExecutionCallback
和AfterTestExecutionCallback
,然后使用扩展提供的上下文来评估异常。在这个类中,我们可以添加类似于以下内容的代码:
@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的未来版本中直接实现。 谢谢!
TestWatcher
等效的代码:code,docs。免责声明:我是包含此 watcher 实现的扩展库的作者。 - glytching