1

我的单元测试使用枚举作为数据点(请参阅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的答案认为警告是正确的,您应该公开这些类型。单元测试与这些其他情况的不同之处在于测试的公共方法不被任何其他代码调用。
    (我承认测试框架调用它们,但我希望你明白我的意思)。
  • 据我所知,JUnit 不会调用私有测试方法,事实上,当它看到带有“Theory”注释的私有方法时会引发错误。
4

1 回答 1

0

两个建议:

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

  2. 在您的测试方法中接受 aObject而不是Lists并强制转换。

于 2013-10-11T13:05:38.013 回答