我正在将测试从 Junit4 迁移到 Junit5,其中一个是基本测试类,已被其他 29 个带有构造函数的类继承。
我改用Junit5,结构如下:
public class BaseTest {
protected String field1;
protected Integer field2;
public BaseTest(String field1, Integer field2) {
this.field1 = field1;
this.field2 = field2;
}
}
public class ChildTest extends BaseTest {
public ChildTest(String field1) {
super(field1, null);
}
private static Stream<Arguments> data() {
return Stream.of(Arguments.of("string1"));
}
@ParameterizedTest
@MethodSource("data")
public void test1() {
assertNull(this.field2);
}
}
但是现在,它抛出了
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [java.lang.String arg0] in constructor [public junit5.ChildTest(java.lang.String)].
我看到其他答案并不真正适用于此,任何人都可以分享任何想法吗?
我看到了这个:Junit 5 - 没有为参数注册 ParameterResolver
@ParameterizedTest
已经;谢谢!
在 JUnit 5 中,带参数的内置测试(例如通过
@ParameterizedTest
注释)不会传播到测试类构造函数的参数。对于参数化构造函数,您需要注册一个特殊的 ParameterResolver 来告诉框架如何将参数传递给构造函数。