如果您有一些遗留Java应用程序,并且不允许更改方法的可见性,那么测试私有方法的最佳方法是使用反射 。
在内部,我们使用帮助程序来获取 / 设置private
和private static
变量,以及调用private
和private 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)
需要使用 privates。
测试私有方法的最佳方法是通过另一种公共方法。如果无法执行此操作,则满足下列条件之一:
当我在一个足够复杂的类中有私有方法时,我觉得需要直接测试私有方法,这就是代码味道:我的类太复杂了。
我解决这些问题的常用方法是梳理一个包含有趣位的新类。通常,此方法及其与之交互的字段可能会被提取到新类中。
新类将这些方法公开为 “公共”,因此它们可以进行单元测试。新旧课程现在都比原来的课程简单,这对我来说很棒(我需要保持简单,否则我会迷路!)。
请注意,我并不是说人们在不使用大脑的情况下创建课程!这里的要点是使用单元测试的力量来帮助您找到好的新类。