如何在 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
)来实现 BeforeTestExecutionCallback
和 AfterTestExecutionCallback
,然后 使用给定的上下文评估异常通过扩展 。
在此 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 直接实现。
谢谢!
我正在迁移到 JUnit5,我想知道 JUnit5 中是否有一种简单的方法来知道测试何时失败,就像我们在 JUnit4 中使用 TestWatcher 时一样。
我做了一些研究,发现了类似但开放的问题,比如这个: https://github.com/junit-team/junit5/issues/542 由于它们中的大多数都已经很老了,所以我想问一下,以防万一有最新的解决方案。
我的想法是能够截屏或在我的日志中添加一些消息。那么,是否有侦听器或扩展程序或其他东西可以让我快速管理 webdriver 测试的 failure/pass/skip? 提前致谢!
好的,谢谢glytching。
这比我想象的要难,但终于做到了。正如您指出的那样,我们需要创建一个外部 class(例如 WatcherExtension
)来实现 BeforeTestExecutionCallback
和 AfterTestExecutionCallback
,然后 使用给定的上下文评估异常通过扩展 。
在此 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 直接实现。 谢谢!