java - 如何在extensionContext中获取变量值
问题描述
如何将结果字段的值放入我的 TestReporter 类?
@ExtendWith({TestReporter.class})
private TestClass{
String result;
@Test
void testA(){
//some action here
result = some result;
}
}
public class TestReporter implements BeforeAllCallback, BeforeTestExecutionCallback, AfterAllCallback,
TestWatcher {
private static ExtentHtmlReporter htmlReporter;
private static ExtentReports extent;
private static ExtentTest test;
@Override
public void beforeAll(ExtensionContext context) throws Exception {
//set up extent report
}
@Override
public void testSuccessful(ExtensionContext context) {
//not possible, but desired
test.pass(context.getElement.get("result"), MediaEntityBuilder.createScreenCaptureFromPath("test"+count+".png").build());
}
}
我一直在研究如何做到这一点,但不确定我正在寻找的东西是否可能或如何实施
解决方案
TLDR;
在必须实现适当回调的扩展中使用反射,例如AfterEachCallback
. 通过 抓取测试类的实例context.getRequiredTestInstance()
。
长版
@ExtendWith(TestReporter.class)
public class TestClass {
String result;
@Test
void testA() {
result = "some result";
}
}
class TestReporter implements AfterEachCallback {
@Override
public void afterEach(final ExtensionContext context) throws Exception {
Object testInstance = context.getRequiredTestInstance();
Field resultField = testInstance.getClass().getDeclaredField("result");
String resultValue = (String) resultField.get(testInstance);
System.out.println("Value of result: " + resultValue);
}
}
请注意 anAfterAllContext
无权访问测试实例,因为每个测试方法都有一个实例。使用TestWatcher
代替AfterEachCallback
也可以。
推荐阅读
- php - Wordpress:使用分页时重复的帖子
- arrays - 如何在 TypeScript 中的对象数组中累积先前的值
- xml - RSS 提要未定义项目元素验证错误
- c++ - 在特定目录中创建一个名为文件的字符串
- java - 是否可以通过稍作修改从另一个规范生成 Openapi 规范文件?
- jenkins - Jenkins - 如何更改插件目录?
- azure - 到 Azure Blob 存储的 Elasticsearch 快照 - 找不到帐户的 azure 客户端
- angular - 如何修复错误“NgFor 仅支持绑定到 Iterables,例如数组”?
- sql - 如何向日期维度表添加更多日期数据?
- python-3.x - 获取从一个阵列的最近样本到另一个阵列的样本的距离