JUnit&警告通过公共API导出非公共类型

时间:2013-10-11 10:35:57

标签: java junit warnings

我的单元测试使用枚举作为数据点(参见JUnit Theories)。

此枚举仅用于测试,因此我更喜欢将其封装并使用私有嵌套类。 JUnit要求测试方法是公开的。测试方法将private enum作为参数:

@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不会调用私有测试方法,实际上当它看到一个用“Theory”注释的私有方法时会抛出一个错误。

1 个答案:

答案 0 :(得分:0)

两个建议:

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

  2. 在您的测试方法中接受Object而不是Lists并投射。