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