繁体   English   中英

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

[英]Accessing private members for unit testing

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

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

如果您不想使用框架,则可以使用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(无显式修饰符)作为字段或方法。 有关更多详细信息,请参阅控制对类成员的访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM