如何将不同的变量传递到JUnit5中的beforeEach挂钩

时间:2019-02-27 08:47:49

标签: java junit java-8 junit5

我为测试用例设置了很长的时间,它位于@beforeEach挂钩中。

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

我当前的设置是:

@beforeEach
@afterEach

@Test
@Test
@Test
  

本质上,所有3个测试都需要将不同的变量注入到beforeEach挂钩中。

从我读到的内容来看,ParameterResolver可以工作,但是我所得到的似乎抛出了异常,因为我在类的其他地方(需要)使用@Test注释:< / p>

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);
}

有人以前做到过吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

supportsParameter()应该从不返回true作为硬编码值。相反,ParameterResolver必须确定是否应该解析参数-例如,通过类型或注释。

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

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