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的单元测试

相关推荐
HeLiang7几秒前
proguard 混淆 使用JDK17 的 springboot4 + JPA
java·spring boot·proguard
武子康2 分钟前
Java-10 深入浅出 MyBatis 一对多与多对多查询配置详解
java·后端
一 乐2 分钟前
网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·网上订餐系统
摇滚侠3 分钟前
我把一个依赖安装到了本地仓库,但是IDEA 刷新 maven 提示远程私服仓库找不到,怎么解决
java·maven·intellij-idea
.Cnn8 分钟前
SpringBoot 文件上传与阿里云 OSS 集成
java·spring boot·后端·阿里云
Mininglamp_271810 分钟前
现在入局Agent开发还来得及吗?
java·开发语言
疯狂成瘾者12 分钟前
GHCR 是什么?GitHub 容器镜像仓库技术介绍
java·linux
方也_arkling16 分钟前
【Java-Day10】多态
java·开发语言
布朗克16822 分钟前
04 变量与数据类型
java·变量与数据类型
hdsoft_huge22 分钟前
以2026世界杯晋级逻辑,生动拆解SpringBoot软件架构
java·spring boot·后端