junit @RunWith(Parameterized.class)注解引发空值

guicsvcw  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(166)

我有一个扩展到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.

谁能帮我弄明白发生了什么事?

zrfyljdw

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)。
为了完整起见,我建议在基本测试类中为参数添加一个构造函数:

public BaseTest(Boolean fSomething) {
    this.fSomething = fSomething;
}

...或者如果您将字段设为final,则使用Lombok注解@AllArgsConstructor@RequiredArgsConstructor(首选)。

o7jaxewo

o7jaxewo2#

在发布的代码中,我看到在派生类中使用了@Test,而在基类中使用了@ parametered,因为您同时使用了这两个注解,所以会看到这些问题。请检查它的用法。

相关问题