我为创建的驱动程序ive的测试使用了“自定义”标签。我正在寻找一种使用新的Junit5 jupiter扩展在BeforeEach和AfterEach期间初始化和退出该驱动程序的方法。
@Target({TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@ExtendWith(MyExtension.class)
public @interface MyDriver
{
}
我已经看到有AnnotationSupport.class,它应该可以帮助您获取带有某些注释但没有找到任何示例的字段。
我想要的只是能够处理使用扩展中的注释注释的字段。
答案 0 :(得分:1)
您可以这样处理:
int count = 10;
while (count--) {
switch(std::tolower(n)) {
case 'a': case 'e':
case 'i': case 'o':
case 'u': total ++; break;
default:;
}
}
然后在这样的测试类中的每个测试之前调用哪个:
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();
}
}
});
}
}
但是,我不会使用注释@MyDriver
class SomeTestThatUsesDriver {
@MyDriver
Object fieldWithAnnotation = "whatever";
@Test
void aTest() {
...
}
}
来添加扩展名和标记字段。我宁愿使用@MyDriver
之类的附加注释,也可以直接在测试类中添加扩展名。