JUnit测试进阶(Private测试)

Private测试


前言

在单元测试中,由于私有方法(Private Method)无法直接被调用,因此对私有方法进行测试成为一项难题。一个可行的方法是:在测试时将私有方法改变为公有方法(Public Method),在测试完成后再将其修改为私有方法。然而,该方法操作过程比较复杂,不利于自动化测试的开展。因此,针对私有方法的测试多采用间接调用或利用反射机制进行

以图中三角型程序Triangle为例,说明JUnit对私有方法的测试方法。在Triangle中,diffOfBorders方法用于判断两条边的长度差异,为程序判断给定三条边是否满足"两条边之差是否小于第三条边"提供服。因此,diffOfBorders方法是一个私有方法。若直接调用diffOfBorders进行测试,就会报错not

visible错误,那么,我们该如何解决呢?


一、间接调用

如前所叙,diffOfBorders为判断三条边是否满足三角形条件服务,被isTriangle方法调用。因此,可通过测试isTriangle来间接测试diffOfBorders。下图给出了一个间接调用示例。对isTriangle进行调用时,分别以<4,3>, < 3,4>,<4,4>作为输入来调用diffOfBorders,基本满足了diffOfBorders各种逻辑覆盖和路径覆盖需求

二、Java反射机制调用

除间接调用外,还可利用Java反射机制实现对私有方法的单元测试。通过反射,研发人员可以在程序运行时获取加载类中的所有访问属性(包括public

,private,protected等)的成员方法和成员变量,下图给出一个应用Java反射机制的私有方法测试用例testdiffOfBorders。通过方法名和参数信息获取testdiffOf-

Borders方法后,可将其设置为可访问权限。此时,便可通过method提供的invoke方法调用testdiffOfBo-

rders的功能,实现对testdiffOfBorders的单元测试

相关推荐
朝新_4 小时前
【多线程初阶】阻塞队列 & 生产者消费者模型
java·开发语言·javaee
立莹Sir4 小时前
Calendar类日期设置进位问题
java·开发语言
季鸢6 小时前
Java设计模式之状态模式详解
java·设计模式·状态模式
@yanyu6666 小时前
springboot实现查询学生
java·spring boot·后端
ascarl20107 小时前
准确--k8s cgroup问题排查
java·开发语言
magic 2457 小时前
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
java
爱敲代码的憨仔7 小时前
分布式协同自动化办公系统-工作流引擎-流程设计
java·flowable·oa
纪元A梦7 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
卿着飞翔7 小时前
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
java·rabbitmq·java-rabbitmq
陈阿土i7 小时前
SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
java·redis·ai·springai