如何测试具有私有方法,字段或内部类的类?

问题:

如何使用JUnit测试一个具有内部私有方法,字段或嵌套类的类?
更改访问修饰符似乎是不好的方法,只是为了能够运行测试。

回答:

如果您有一些遗留应用程序,并且您不能更改方法的可见性,则测试私有方法的最佳方法是使用reflection
在内部,我们使用帮助来获取/设置privateprivate static变量,以及调用privateprivate static方法。以下模式将让您完成与私有方法和字段相关的任何操作。当然,你不能通过反射来改变private static final变量。

Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);

对于领域:

Field field = targetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);

 笔记:
1. targetClass.getDeclaredMethod(methodName, argClasses)可让您查看private方法。 getDeclaredField
2也是一样的。setAccessible(true)需要玩私人游戏。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to test a class that has private methods, fields or inner classes?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

54 − 48 =