java - 如何将不同的变量传递给 JUnit5 中的 beforeEach Hook

标签 java junit java-8 junit5

我为我的测试用例设置了相当长的时间,它位于 @beforeEach Hook 中。

问题是 @beforeEach Hook 中的第一个方法需要根据正在运行的测试使用不同的变量,否则我将不得不复制整个测试类以适应变量变化,这当然是不理想的。

我目前的设置是:

@beforeEach
@afterEach

@Test
@Test
@Test

Essentially, all 3 tests requires a different variable to be injected into the beforeEach hook.

根据我的阅读,ParameterResolver 可以工作,但我得到的似乎会引发异常,因为我在类的其他地方使用了 @Test 注释(我需要它):

public class ValidListParameterResolver implements ParameterResolver {

    private static List<String> LIST_OF_STRINGS_TO_USE = ImmutableList.of("a", "b");

    @Override
    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
        return true;
    }

    @Override
    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
        return LIST_OF_STRINGS_TO_USE.get(new Random().nextInt(LIST_OF_STRINGS_TO_USE.size()));
    }
}

然后在我的测试类中:

@BeforeEach
@ExtendWith(ValidListParameterResolver.class)
    void create(String file) throws IOException {

        Type name = method(file);
}

有没有人做到过这个?

非常感谢您的帮助。

最佳答案

这里有一些提示可以帮助您走上正确的道路。

supportsParameter()应该永远返回true作为硬编码值。相反,一个 ParameterResolver必须确定它是否应该解析参数——例如,按类型或注释。

扩展无法在 @BeforeEach 上注册方法(或任何其他生命周期方法)。您需要使用 @ExtendWith 在测试类中注册它.

如果你想知道在@BeforeEach中将要执行哪个测试方法方法,添加一个TestInfo testInfo @BeforeEach 的参数方法的参数列表。然后您可以访问测试 MethodTestInfo .

关于java - 如何将不同的变量传递给 JUnit5 中的 beforeEach Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901357/

相关文章:

java - 在类型 'httpServletRequest' 的对象上找不到属性或字段 'org.springframework.webflow.engine.impl.RequestControlContextImpl'

java - java中的FileWriter不写入txt文件

java - 如何修复 java.lang.IllegalStateException : You have not started an Objectify context

java - PowerMock,模拟一个静态方法,然后在所有其他静态上调用真实方法

java-8 - Java 8 流重构

json - 使用 java 8 将 Map<Object, List<Object>> dataMap 转换为 json

java - Maven 阴影无法找到 XML 模式命名空间的 Spring NamespaceHandler

java - 将新节点插入 AVLTree 后根节点为空

java - Spring Boot AMQP @RabbitListener 没有收到消息

java - 可以显式删除对 lambda 的序列化支持