java - 如何将参数注入(inject) JUnit 5 扩展

标签 java junit junit5 junit5-extension-model

是否可以将 ParameterResolver 提供的参数注入(inject)(或以其他方式获取)到扩展中?

以下示例使用 Spring 和 RestAssured,但我正在寻找更通用的解决方案:

在测试类中我可以做以下事情:

@BeforeEach
void setUpRestAssured(@LocalServerPort int port) {
    RestAssured.port = port;
}

如果我想把它放到一个扩展中,我会实现 BeforeEachCallback:

public class RestAssuredExtension implements BeforeEachCallback {
    @Override
    public void beforeEach(ExtensionContext context) throws Exception {
        int port = ???
    }
}

我知道我可以使用 @LocalServerPort 注释创建一个字段并使用 AnnotationSupport 获取它,但这只有效,因为 Spring 扩展注入(inject)了它。我正在寻找一种更通用的方法,该方法可以使用参数解析器与其他扩展一起使用。

最佳答案

在经历了生命周期方法和扩展的当前实现之后,我没有看到解决该问题的通用方法。 Jupiter 的扩展机制需要一种访问其他扩展的方法——或者至少是注册的参数解析器。您可能想在 https://github.com/junit-team/junit5 创建问题并请求该功能。

关于java - 如何将参数注入(inject) JUnit 5 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60844976/

相关文章:

java - Maven 不会将依赖项与 java 导入关联起来

java - 使用索引高效搜索单词

java - Android:仅在一个选项卡上更改方向?

java - 测试抛出 NullPointerException 而不是 RandomCustomException,但仅在某些环境中

junit - 在 Kotlin 和 JUnit 5 中重复 @ExtendWith

junit5 - 如何将 JUnit 4 Parameterized 测试迁移到 JUnit 5 ParameterizedTest?

java - WebSphere Liberty Profile Verbose Class Logging - 它的输出在哪里?

java - 无法测试 Cassandra executeAsync 响应

android - 测试框架意外退出 - ClassNotFound 异常

java - 如何使用控制台启动器从命令行运行 JUnit5 测试?