1
我的單元測試使用枚舉作爲數據點(請參閱JUnit Theories)。JUnit&警告通過公共API導出非公共類型的警告
此枚舉只用於測試,因此我更喜歡它被封裝和一個私人嵌套類。 JUnit要求測試方法公開。測試方法有私人枚舉作爲參數:
@RunWith(Theories.class)
class ExampleTest {
private enum Lists {
EMPTY,
SINGLE_ELEMENT,
OTHER_ELEMENT,
TWO_ELEMENTS;
public Object createElements() {
// Imagine createElements being abstract and
// implemented in each enum constant.
}
}
@DataPoints
public static final Lists[] ALL_LISTS = Lists.values();
private List<Object> tested;
@Theory
public void add_sizeIncreased(Lists elementsToAdd) {
int oldSize = tested.size();
int nElementsAdded = elementsToAdd.size();
tested.addAll(elementsToAdd);
assertThat(tested.size(), is(equalTo(oldSize + nElementsAdded));
}
}
這正好導致警告/提示:「導出非公開型通過公共API」(Netbeans中至少)。
解決此問題的正確方法是什麼?
- 我還沒有找到'SuppressWarnings'註釋;
- 對相關SO問題的解答Sachin,Aselivanov和user329820認爲警告是正確的,並且您應該公開這些類型。 unittest與這些其他情況的不同之處在於,測試的公共方法不會被其他代碼調用。
(我承認測試框架稱他們,但我希望你看到我的觀點)。 - 據我所知,JUnit不會調用私有測試方法,事實上,當它看到用'Theory'註解的私有方法時會引發錯誤。