访问私人成员进行单元测试

时间:2015-07-23 19:32:59

标签: java unit-testing junit4

通常当我用C ++编写单元测试时,我会向tesee声明测试类朋友。这样我就可以通过检查成员变量来直接检查操作的结果。 Java没有朋友,那么你如何实现相同的行为呢? 我不是在谈论简单的getter和setter,其中测试是微不足道的,但是操作结果存储在类内部并且不暴露给外部世界的情况。

2 个答案:

答案 0 :(得分:0)

您可以使用PowerMock框架来模拟给定类中的私有成员。您可以参考链接以获取有关如何执行此操作的示例。

答案 1 :(得分:0)

如果您不想使用框架,可以使用Java反射

使用Java中的反射访问私有字段的值

Person privateRyan = new Person("John" , "8989736353");
Field privateField = person.getDeclaredField("phone");

//this call allows private fields to be accessed via reflection
privateField.setAccessible(true);

//getting value of private field using reflection
String value = (String) privateField.get(privateRyan);

使用反射访问私有方法

Method privateMethod = person.getDeclaredMethod("call");

//making private method accessible using reflection
privateMethod.setAccessible(true);

//calling private method using reflection in java
privateMethod.invoke(privateRyan);

(来自:http://javarevisited.blogspot.com/2012/05/how-to-access-private-field-and-method.html

此外,您可以将测试类移动到测试类所在的同一个包中,并对字段或方法使用package-private(无显式修饰符)。 有关详细信息,请参阅Controlling Access to Members of a Class