我们如何测试包私有类?

Hai*_*ang 15 java testing unit-testing

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

为了便于测试,您可能想要使类,接口或成员更易于访问.这一点很好.为了测试公共类包私有成员是可以接受的,但是提高可访问性是不可接受的.换句话说,将类,接口或成员作为包的导出API的一部分以便于测试是不可接受的.

我知道我们应该封装成员,隐藏来自客户端的信息,我们可以通过使用setter和getter访问类来测试它们,但我应该如何理解make class package-private是否可访问,如果是这样如何测试它?

Mic*_*man 12

基本上,这意味着您的测试人员类应与测试类位于同一个包中.这将使您的测试类和所有受包保护的成员和方法可供您的测试类访问.这些类可能位于不同的根目录下:您的测试类可能src/myrootpackage.first.second.MyClass位于,测试类可能位于test/myrootpackage.first.second.MyClass.Tester


Mic*_*ihs 5

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

package my.package;

class TestableClass {
     private String property;
}
Run Code Online (Sandbox Code Playgroud)

您可以将可见性更改为

package my.package;

class TestableClass {
    String property;
}
Run Code Online (Sandbox Code Playgroud)

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

package my.package;

class TestableClassTest {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

同时,子类不能访问该属性——这是与protected.