我为我的测试用例设置了相当长的时间,它位于 @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
的参数方法的参数列表。然后您可以访问测试 Method
在TestInfo
.
关于java - 如何将不同的变量传递给 JUnit5 中的 beforeEach Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901357/