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

2024-02-25

如何使用 JUnit 测试具有内部私有方法、字段或嵌套类的类?

为了能够运行测试而更改方法的访问修饰符似乎很糟糕。


如果你有一些遗产Java应用程序,并且您不允许更改方法的可见性,测试私有方法的最佳方法是使用反射 http://en.wikipedia.org/wiki/Reflection_%28computer_programming%29.

在内部我们使用助手来获取/设置private and private static变量以及调用private and 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);

Notes:

  1. TargetClass.getDeclaredMethod(methodName, argClasses)让你看看private方法。同样的事情也适用于getDeclaredField.
  2. The setAccessible(true)需要和私人一起玩。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试具有私有方法、字段或内部类的类? 的相关文章

随机推荐

  • 定制 Android 操作系统构建

    我想知道创建自定义 Android 版本并将其部署到市场上当前可用的设备上的可行性如何 是否有描述该过程的文件或指南 先感谢您 萨米 Try dsixda 的 Android 厨房 http forum xda developers com
  • JSON序列化时如何使用JavaScriptSerializer设置格式?

    我正在使用 JavaScriptSerializer 将文件中的对象序列化为 JSON 格式 但结果文件没有可读的格式 如何允许格式化以获得可读文件 你可以使用JSON NET http json codeplex com 序列化器 支持
  • Matplotlib寄生对数轴勾选不需要的镜像

    我正在尝试使用 mpl toolkits axes grid1 中的 host subplot 制作一个具有两个 y 轴的图 其中一个是对数轴 一个是线性轴 该图看起来不错 但辅助 y 轴 右 的小刻度也显示在图内部的主 y 轴 左 上 i
  • android sqlite数据库中rawquery和execSQL的区别

    使用 rawquery 和 execSQL 之间的确切区别是什么 在 android Activity 中编写查询时 何时使用 rawquery 以及何时使用 execSQL 来自 API 文档 void execSQL String sq
  • 片段 - 您是否必须在包含整个活动的片段周围使用活动包装器?

    考虑以下示例应用程序开发者 android com http developer android com images fundamentals fragments png 这描述了如何使用 Fragment 如下所示 在电话上 您可以在活
  • 是否可以将条件属性创建为 DisplayIf?

    我想创建一个与我的视图模型一起使用的属性 我想根据第三个值显示不同的文本字符串 我想做这样的事情 DisplayIf IsPropertyValid true Name value 1 DisplayIf IsPropertyValid f
  • 当第三方 C 函数返回指针时,您应该自行释放它吗?

    有许多函数 特别是在 POSIX 库中 返回指向几乎必然新分配的数据的指针 他们的联机帮助页没有说明您是否应该释放它们 或者是否有一些模糊的机制在起作用 例如返回指向静态缓冲区的指针 或者类似的东西 例如 inet ntoa http ww
  • 使用 Graphics.CopyFromScreen 以 150% 缩放比例截取屏幕截图

    我正在尝试创建屏幕截图 位图 我写了这个函数 public static Bitmap CreateScreenshot Rectangle bounds var bmpScreenshot new Bitmap bounds Width
  • Spark应用程序启动后如何更改名称?

    我在更新 重新配置名为 spark 的预定义 Spark 上下文时遇到问题 spark sparkContext conf get spark app name 返回应用程序名称 Databricks Shell 我想更新它并尝试使用 sp
  • 如何将一周 (200851) 转换为日期 (2008-12-27)?

    如何将年周 例如 0852 或 200852 转换为日期 例如 2008 12 31 或具体的一周结束日 即星期六 2008 12 27 或一周开始日 即 2008 年 12 月 21 日 周末的任何一天都可以 周五 周六 周日或周一 SQ
  • 如何调整/dev/shm的大小?

    On Ubuntu 18 04 当我跑步时 df h 我看到这个结果 Filesystem Size Used Avail Use Mounted on tmpfs 3 9G 73M 3 8G 2 dev shm dev shm大小为3 9
  • 评估一串简单的数学表达式[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 挑战
  • 创建一个随机数并检查它是奇数还是偶数

    我希望创建一个批处理文件 该文件在运行时创建一个从 0 到 100 的随机整数 然后通过 if 语句运行它来检查它是奇数还是偶数 我遇到了一些麻烦 所以这就是我到目前为止遇到的问题 echo off set a num random 100
  • 如何使用 Swift 中的协议公开 Objective-C 对象的私有类方法?

    考虑两个私有方法UIColor 实例方法styleString返回颜色的 RGB 字符串 类方法 systemDestructiveTintColor它返回破坏性按钮使用的红色 UIColor h 私有标头供参考 https github
  • ServiceStack:否/swagger-ui/index.html

    我正在将 ServiceStack 用于我的自定义服务 在没有 IIS 的独立模式下 我想为我的服务添加超出范围的文档 metadata做 我想尝试一下 Swagger 插件 我已将插件命令添加到我的配置中 public override
  • 存在类型表达式的 Skolem 化

    在 Scala 中 以下表达式会引发类型错误 val pair A gt String A forSome type A a Int gt a toString 19 pair 1 pair 2 正如中提到的SI 9899 https is
  • 在 C# < 4 中,如何根据参数的运行时类型分派到方法?

    我有一个对象o在运行时保证是三种类型之一A B or C 所有这些都实现了一个通用接口I 我可以控制I 但不是A B or C 因此 我可以使用空标记接口 或者以某种方式通过使用接口来利用类型中的相似性 但我无法添加新方法或更改类型中的现有
  • ash 文件的结构如何?

    我有一个使用 ash 的小型发行版 不是 busybox 我不确定如何处理点文件结构 ashrc 似乎没有被拾取 我也没有看到 bash profile 类似物 shell启动文件有默认约定吗 手册页的调用部分对此进行了介绍 profile
  • 数据字段中包含 SSD AID 的删除 APDU 命令,返回 6985

    我有一个包含 SSD 补充安全域 的 Javacard 我想删除它 通常 当我想从卡中删除小程序或包时 我会发送以下内容删除 APDU成功后命令相互认证过程 不需要 MAC 或数据字段加密 并且Security Level 0就足够了删除
  • 如何测试具有私有方法、字段或内部类的类?

    如何使用 JUnit 测试具有内部私有方法 字段或嵌套类的类 为了能够运行测试而更改方法的访问修饰符似乎很糟糕 如果你有一些遗产Java应用程序 并且您不允许更改方法的可见性 测试私有方法的最佳方法是使用反射 http en wikiped