簡體   English   中英

junit @RunWith(Parameterized.class) 注釋正在拋出 null

[英]junit @RunWith(Parameterized.class) annotation is throwing null

我有一個擴展到 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.

有人可以幫助我了解發生了什么嗎?

我注意到您使用 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.jupiter.api.Test (jUnit 5) 使用org.junit.Test (jUnit 4)。


為了完整起見,我建議為基礎測試類中的參數添加一個構造函數:

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

...或使用 Lombok 注釋@AllArgsConstructor@RequiredArgsConstructor以防您將字段設為final (首選)。

在發布的代碼中,我看到@Test 在派生類中使用並在基類中使用@parameterized,因為您同時使用了看到這些問題的注釋。 檢查它的用法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM