1

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

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

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

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

4

1 回答 1

2

你可以这样做:

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来添加扩展名和标记字段。我宁愿得到一个额外的注释,@MyDriverField或者直接在测试类中添加扩展。

于 2019-11-28T16:52:39.673 回答