当前位置: 首页 > 知识库问答 >
问题:

如何在Junit 5 jupiter扩展中从测试中获取字段

左丘阳晖
2023-03-14

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

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

我看到有一个AnnotationSupport.class应该可以帮助你获得用特定注释标注的字段,但是没有找到任何例子。

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

共有1个答案

拓拔元徽
2023-03-14

你可以这样做:

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或直接在测试类中添加扩展。

 类似资料:
  • 我是Go语言开发者。我们的团队选择使用协议缓冲区来转换数据。我选择了这个protobuf包:https://github.com/golang/protobuf.但是,这个包没有方法来处理协议缓冲区中的字段。我只在protoc生成的类文件中找到了以下代码: 那么,如何在Go中设置/获取字段?

  • 问题内容: 我希望获取正在上传的图像的文件扩展名,但我只获得了一个数组。 有没有办法只是获得扩展本身? 问题答案: 无需使用字符串函数。您可以使用实际为您想要的东西设计的东西:

  • 在JUnit5中,我试图获得一个从扩展运行的测试类方法。我正在使用JUnit5扩展接口TestWatcher,并重写testFailed()方法。 这个扩展的目的是在测试类的Selenium WebDriver浏览器中拍摄失败的屏幕快照,并将其附加到该测试的诱惑报告中。test class方法有实例化的浏览器和注释,用于附加到Allure。并且我的takeScreenshot方法依赖浏览器和来自测

  • JUnit5API中有几个可用的扩展点。 null 我可以使用相同的模式,因为上的可见性。 下面有几个具体的例子来演示: > 基于系统属性启用测试的。这可以通过一些反射和使用或样式的进行测试,但是当并行测试执行时,处理起来似乎更加复杂,可能会出现问题。此示例展示了“如何提供实际的并对结果进行断言”的示例。 扩展测试的自定义测试引擎是正确的方法吗? 那么,如何测试各种扩展实现而不依赖于内部API,并

  • 问题内容: 我想从 MimeType* 获取 扩展名 。 * 例如: 要将文件保存在Windows或Linux上,我可以使用这种方法从URL下载文件。因此,我只能保存它而没有扩展名(我不想要那样)。 这种方法只允许我获取 MimeType 而不是 扩展名 。 如何使用MimeType编写带有扩展名的文件? 问题答案: 通常有两种方法: 具有MimeTypes到扩展名的映射; 使用某种逻辑进行计算;

  • 我想从一个mimetype中得到扩展。 例如: 为了在Windows或Linux上保存我的文件,我有一个方法,让我从URL下载文件。所以,我只能在没有扩展的情况下保存它(我不想那样)。 这个方法只允许我获取MimeType,而不是扩展。 如何使用MimeType编写扩展名的文件?