如何测试私有函数或具有私有方法,字段或内部类的类?推荐| Java Debug 笔记

2021/5/19 22:31:53

本文主要是介绍如何测试私有函数或具有私有方法,字段或内部类的类?推荐| Java Debug 笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文正在参加「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块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️



这篇关于如何测试私有函数或具有私有方法,字段或内部类的类?推荐| Java Debug 笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程