本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
提问:一行初始化ArrayList
如何对具有内部私有方法,字段或嵌套类的类进行单元测试(使用xUnit)?还是通过内部链接(static在C / C ++中)或在私有(匿名)名称空间中使其私有化的函数?
仅仅为了能够运行测试而更改方法或函数的访问修饰符似乎很糟糕。
高分回答:
很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}很多的知识点,真的需要写出来才会掌握!!!
更新: 大约十年后,测试私有方法或任何无法访问的成员的最佳方法可能是@Jailbreak来自Manifold框架。 @Jailbreak Foo foo = new Foo(); // Direct, *type-safe* access to *all* foo's members foo.privateMethod(x, y, z); foo.privateField = value; 这样,您的代码将保持类型安全和可读性。没有设计折衷,也没有为了测试而过度曝光的方法和字段。 复制代码
如果您使用的是旧版Java应用程序,并且不允许更改方法的可见性,那么测试私有方法的最佳方法是使用Reflection。
在内部,我们使用助手来获取/设置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)必须与私人玩耍。
文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/3…
作者建议:掌握反射,用处不仅仅在于本问答!!!
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞???? 求关注❤️ 求分享???? 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️