gpt4 book ai didi

java - 如何获取在 Java 中 Cucumber 测试失败时抛出的异常?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:04:34 25 4
gpt4 key购买 nike

我可以使用以下方法对测试失败执行操作:

@After
public void afterTest(Scenario scenario) {
if (scenario.isFailed()) {
/*Do stuff*/
}
}

但是,我需要执行的某些操作取决于抛出的异常以及抛出异常的上下文。有没有办法获取导致测试失败的Throwable?例如,在 JUnit 中,我会通过扩展 TestWatcher 并向我的测试添加规则来做到这一点:

@Override
protected void failed(Throwable e, Description description) {
/*Do stuff with e*/
}

但是 cucumber-junit 实现不允许使用规则,因此该解决方案不适用于 Cucumber。

我认为我不需要解释为什么在测试失败时访问抛出的异常会有用,但是我仍然会提供一个示例:

我的测试环境并不总是稳定的,所以我的测试随时可能会意外失败(没有特定的地方我可以 try catch 异常,因为它随时可能发生)。发生这种情况时,我需要重新安排测试以进行另一次尝试,并记录事件,以便我们可以获得一些关于环境不稳定性的良好统计数据(时间、频率、持续时间等)

最佳答案

Frank Escobar 建议的解决方法的问题:

通过使用反射进入框架内部,您依赖于实现细节。这是一种不好的做法,当框架更改其实现时,您的代码可能会中断,正如您将在 Cucumber v5.0.0 中观察到的那样。

Cucumber 中的 Hook 旨在操纵场景前后的测试执行上下文。他们不会报告测试执行本身。报告是横切关注点,最好使用插件系统进行管理。

例如:

package com.example;

import io.cucumber.plugin.ConcurrentEventListener;
import io.cucumber.plugin.event.EventPublisher;
import io.cucumber.plugin.event.Result;
import io.cucumber.plugin.event.Status;
import io.cucumber.plugin.event.TestCase;
import io.cucumber.plugin.event.TestCaseFinished;

public class MyTestListener implements ConcurrentEventListener {
@Override
public void setEventPublisher(EventPublisher publisher) {
publisher.registerHandlerFor(TestCaseFinished.class, this::handleTestCaseFinished);
}

private void handleTestCaseFinished(TestCaseFinished event) {
TestCase testCase = event.getTestCase();
Result result = event.getResult();
Status status = result.getStatus();
Throwable error = result.getError();
String scenarioName = testCase.getName();
String id = "" + testCase.getUri() + testCase.getLine();
System.out.println("Testcase " + id + " - " + status.name());
}
}

当使用 JUnit 4 和 TestNG 时,您可以使用以下方式激活此插件:

@CucumberOptions(plugin="com.example.MyTestListener")

对于 JUnit 5,您可以将其添加到 junit-platform.properties:

cucumber.plugin=com.example.MyTestListener 

或者如果您正在使用 CLI

--plugin com.example.MyTestListener 

关于java - 如何获取在 Java 中 Cucumber 测试失败时抛出的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com