gpt4 book ai didi

java - JUnit 和通过公共(public) api 导出非公共(public)类型的警告

转载 作者:行者123 更新时间:2023-12-01 04:17:18 26 4
gpt4 key购买 nike

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

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

@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));
}
}

这正确地导致警告/提示:“通过公共(public) API 导出非公共(public)类型”(至少在 Netbeans 中)。

解决这个问题的正确方法是什么?

  • 我还没有找到它的“SuppressWarnings”注释;
  • 相关SO问题的解答Sachin , Aselivanov ,和user329820认为警告是正确的并且您应该将类​​型公开。单元测试与其他情况的不同之处在于测试的公共(public)方法不被任何其他代码调用。
    (我承认测试框架调用了它们,但我希望您明白我的观点)。
  • 据我所知,JUnit 不会调用私有(private)测试方法,事实上,当它看到带有“Theory”注释的私有(private)方法时,它会抛出错误。

最佳答案

两个建议:

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

  2. 在测试方法中接受对象,而不是列表并进行转换。

关于java - JUnit 和通过公共(public) api 导出非公共(public)类型的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19316068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com