我有一个扩展到baseTest的测试,我在其中包含了参数。
ATest.class
public class ATest extends BaseTest {
@Test
public void test() {
System.out.println(fSomething);
}
}
BaseTest.class
@RunWith(Parameterized.class)
public class BaseTest {
@Parameterized.Parameter
public Boolean fSomething;
@Parameterized.Parameters(name = "fSomething {0}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {{true}, {false}});
}
}
我得到了空值。如果我设置了构造函数,我会得到这个错误
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [boolean arg0] in constructor.
谁能帮我弄明白发生了什么事?
2条答案
按热度按时间zrfyljdw1#
我注意到您使用jUnit 5中Jupiter,但使用jUnit 4 API。
如果您使用jUnit 5,请使用
@ParametrizedTest
注解重新实现测试。https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests如果您想在这个特定的测试中使用jUnit 4 API,请替换
@Test
注解的导入:请使用org.junit.Test
(jUnit 4)代替org.junit.jupiter.api.Test
(jUnit 5)。为了完整起见,我建议在基本测试类中为参数添加一个构造函数:
...或者如果您将字段设为
final
,则使用Lombok注解@AllArgsConstructor
或@RequiredArgsConstructor
(首选)。o7jaxewo2#
在发布的代码中,我看到在派生类中使用了@Test,而在基类中使用了@ parametered,因为您同时使用了这两个注解,所以会看到这些问题。请检查它的用法。