问题
Java类中private方法通常只能被其所属类的调用,其他类只能望而却步,单元测试private方法也就一筹莫展。
尝试解法:
- 在测试时,手动将private改为public,测试完后再将其改回。
- 将测试方法写进private方法的所属类中,这样就能调用private方法了。
上述解法虽然可行,但这些解法或多或少地违背单元测试应遵守AIR原则。
单元测试在线上运行时,感觉像空气(AIR)那样透明,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。
- A:Automatic(自动化)
- I:Independent(独立性)
- R:Repeatable(可重复)
解法
先创建一个测试目标类App作为示例,目标是测试App类中private方法callPrivateMethod():
public class App {
public void doSomething() {
callPrivateMethod();
}
private String callPrivateMethod() {
return "Private method is called.";
}
}
一
我们可以用Java的反射特性来突破private的限制,从而对private方法