如何在Junit 5木星扩展程序中从测试中获取字段

时间:2019-11-27 11:08:27

标签: java junit5 junit-jupiter

我为创建的驱动程序ive的测试使用了“自定义”标签。我正在寻找一种使用新的Junit5 jupiter扩展在BeforeEach和AfterEach期间初始化和退出该驱动程序的方法。

@Target({TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@ExtendWith(MyExtension.class)
public @interface MyDriver
{
} 

我已经看到有AnnotationSupport.class,它应该可以帮助您获取带有某些注释但没有找到任何示例的字段。

我想要的只是能够处理使用扩展中的注释注释的字段。

1 个答案:

答案 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之类的附加注释,也可以直接在测试类中添加扩展名。