有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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问题SachinAselivanovuser329820的回答认为警告是正确的,您应该公开这些类型。unittest与其他情况的不同之处在于,测试的公共方法不被任何其他代码调用
    (我承认testframework调用了它们,但我希望您明白我的观点)
  • 据我所知,JUnit不会调用私有测试方法,事实上,当它看到用“理论”注释的私有方法时,它会抛出一个错误

共 (1) 个答案

  1. # 1 楼答案

    两项建议:

    1. 只需将枚举公开即可。因为它在测试代码中,所以不会在jar/war中导出,所以没什么大不了的

    2. 在测试方法中接受Object而不是Lists并强制转换