如何测试包私有类?

2022-09-01 21:02:10

我正在读的书,在,它提到:Effective JavaItem 13: Minimize the accessibility of classes and members

为了便于测试,您可能会想使类、接口或成员更易于访问。这在一定程度上是好的。为了测试公共类包,将公共类包的私有成员设置为私有是可以接受的,但是将可访问性提高到更高的水平是不可接受的。换句话说,将类、接口或成员作为包导出的 API 的一部分是不能接受的,以便于测试。

我知道我们应该封装成员,向客户端隐藏信息,我们可以通过使用setter和getter访问类来测试它们,但是我应该如何理解使类包私有可访问,如果是这样,如何测试它?


答案 1

基本上,这意味着您的测试器类应该与测试类位于同一包中。这将使测试类以及所有受包保护的成员和方法可供测试类访问。这些类可能位于不同的根下:测试的类可能位于 下,测试类可能位于 下。src/main/java/myrootpackage/first/second/MyClass.javasrc/test/java/myrootpackage/first/second/MyClassTester.java


答案 2

我猜作者的意思是,而不是

package my.package;

class TestableClass {
     private String property;
}

您可以将可见性更改为

package my.package;

class TestableClass {
    String property;
}

使用第二个实现,您可以从包中的测试访问属性,例如my.package

package my.package;

class TestableClassTest {
    // ...
}

同时,子类无法访问该属性 - 这是对 的好处。protected


推荐