如何从 Junit 5 jupiter 扩展中的测试中获取字段
How to obtain a field from my test in a Junit 5 jupiter extension
我有一个自定义标签,用于测试我创建的驱动程序。我正在寻找一种在 BeforeEach 和 AfterEach 期间使用新的 Junit5 jupiter 扩展来初始化和退出此驱动程序的方法。
@Target({TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@ExtendWith(MyExtension.class)
public @interface MyDriver
{
}
我看到有一个 AnnotationSupport.class 应该可以帮助您获取带有某些注释的字段,但还没有找到任何示例。
我想要的只是能够使用扩展中用我的注释注释的字段。
你可以这样做:
public class MyExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
context.getTestInstance().ifPresent(testInstance -> {
List<Field> driverFields = AnnotationSupport.findAnnotatedFields(testInstance.getClass(), MyDriver.class);
for (Field driverField : driverFields) {
try {
Object fieldValue = driverField.get(testInstance);
// Do whatever you want with the field or its value
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
});
}
}
然后在测试 class 中的每个测试之前调用它,如下所示:
@MyDriver
class SomeTestThatUsesDriver {
@MyDriver
Object fieldWithAnnotation = "whatever";
@Test
void aTest() {
...
}
}
不过,我不会做的是使用注释 @MyDriver
来添加扩展名和标记字段。我宁愿使用 @MyDriverField
之类的附加注释,或者直接在测试 class.
中添加扩展名
我有一个自定义标签,用于测试我创建的驱动程序。我正在寻找一种在 BeforeEach 和 AfterEach 期间使用新的 Junit5 jupiter 扩展来初始化和退出此驱动程序的方法。
@Target({TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@ExtendWith(MyExtension.class)
public @interface MyDriver
{
}
我看到有一个 AnnotationSupport.class 应该可以帮助您获取带有某些注释的字段,但还没有找到任何示例。
我想要的只是能够使用扩展中用我的注释注释的字段。
你可以这样做:
public class MyExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
context.getTestInstance().ifPresent(testInstance -> {
List<Field> driverFields = AnnotationSupport.findAnnotatedFields(testInstance.getClass(), MyDriver.class);
for (Field driverField : driverFields) {
try {
Object fieldValue = driverField.get(testInstance);
// Do whatever you want with the field or its value
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
});
}
}
然后在测试 class 中的每个测试之前调用它,如下所示:
@MyDriver
class SomeTestThatUsesDriver {
@MyDriver
Object fieldWithAnnotation = "whatever";
@Test
void aTest() {
...
}
}
不过,我不会做的是使用注释 @MyDriver
来添加扩展名和标记字段。我宁愿使用 @MyDriverField
之类的附加注释,或者直接在测试 class.