更新:
大约十年后,测试私有方法或任何无法访问的成员的最佳方法可能是
@Jailbreak来自Manifold框架。
@Jailbreak Foo foo = new Foo();// Direct, *type-safe* access to *all* foo's membersfoo.privateMethod(x, y, z);foo.privateField = value;
这样,您的代码将保持类型安全和可读性。没有设计折衷,也没有为了测试而过度曝光的方法和字段。
如果您使用的是旧版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)必须与私人玩耍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)