javajunit&警告通过公共api导出非公共类型
我的单元测试使用枚举作为数据点(请参见JUnit Theories)
这个枚举只在测试中使用,因此我更希望它被封装并成为一个私有的嵌套类。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与其他情况的不同之处在于,测试的公共方法不被任何其他代码调用
(我承认testframework调用了它们,但我希望您明白我的观点) - 据我所知,JUnit不会调用私有测试方法,事实上,当它看到用“理论”注释的私有方法时,它会抛出一个错误李>
# 1 楼答案
两项建议:
只需将枚举公开即可。因为它在测试代码中,所以不会在jar/war中导出,所以没什么大不了的
在测试方法中接受
Object
而不是Lists
并强制转换