我为测试用例设置了很长的时间,它位于@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);
}
有人以前做到过吗?
非常感谢您的帮助。
答案 0 :(得分:0)
这里有一些技巧可以帮助您走上正确的道路。
supportsParameter()
应该从不返回true
作为硬编码值。相反,ParameterResolver
必须确定是否应该解析参数-例如,通过类型或注释。
扩展不能使用@BeforeEach
方法(或任何其他生命周期方法)注册。您需要使用@ExtendWith
在测试类中注册它。
如果您想知道在@BeforeEach
方法中将要执行哪种测试方法,请将TestInfo testInfo
参数添加到@BeforeEach
方法的参数列表中。然后,您可以在Method
中访问测试TestInfo
。