JUnit测试进阶(Private测试)

2023-09-18 00:00:00


前言

在单元测试中,由于私有方法(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的单元测试


在这里插入图片描述

更多推荐

解决文件只能在windows系统上传成功,而linux系统上传失败。

场景:在我们项目准备上线进行SIT测试的时候,测试在文件上传的时候,一直上传不成功,表示当前文件不支持上传,然后我们让测试将他的文件发送给我们进行测试,我们是能够上传成功的,然后询问他们使用的什么系统,发现他们使用的是Linux发行版操作系统Ubuntu。分析原因:可能是由于Linux和Windows操作系统在处理文件

ES6之Map和Set有什么不同?

一、Map1.定义Map是ES6提供的一种新的数据结构,它是键值对的集合,类似于对象,但是键的范围不限于字符串,各种类型的值都可以当做键。Object结构是“字符串-值”的对应,Map结构则是“值-值”的对应2.代码示例Map本身是一个构造函数,先来生成一个Map数据结构,从打印的结果就可以看出,Map实例有以下属性和

C#,《小白学程序》第二十三课:大数的除法(BigInteger Divide)

1文本格式///<summary>///比较a,b的大小,返回1,0,-1///数据从低位(右)往高位(左)存储;///</summary>///<paramname="a"></param>///<paramname="b"></param>///<returns></returns>publicstaticintb

pytorch的卷积层池化层和非线性变化 和机器学习线性回归

卷积层:两个输出的情况就会有两个通道可以改变通道数的最简单的神经网络结构:nn.Mudule就是继承父类super执行的是先执行父类函数里面的forward执行的就是前向网络,就是往前推进的,当然也有反向转播,那就是用来就gradientdicent了,求导计算了。卷积后的结果展示:这里有个小细节224*244输出22

优化软件系统,解决死锁问题,提升稳定性与性能 redis排队下单

项目背景:随着用户数量的不断增加,我们的速卖通小管家软件系统面临了一个日益严重的问题:在从存储区提供程序的数据读取器中进行读取时,频繁出现错误。系统报告了一个内部异常:异常信息如下:从存储区提供程序的数据读取器中进行读取时出错。有关详细信息,请参阅内部异常。--->System.Data.SqlClient.SqlEx

单例模式优缺点

单例模式是一种创建型设计模式,其主要目的是确保类只有一个实例,并提供全局访问点来获取该实例。单例模式具有一些优点和缺点,下面我将列出它们:**优点:**1.**全局唯一性**:单例模式确保在应用程序中只有一个实例,这对于某些类来说是非常有用的,例如配置管理、日志记录器、数据库连接等。2.**延迟初始化**:单例模式允许

网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置

Firefox的全屏方式与Chrome不同,Chrome自带全屏模式以及APP模式,通过简单的参数即可设置,而Firefox暂时么有这个功能,Firefox的全屏功能可以通过全屏插件实现。全屏模式下,按F11不会退出全屏,鼠标移动到屏幕上方也不会提示退出全屏如果当前运行着其它的Chrome窗口,那么全屏化打开是无效的,

高并发系统 - 接口幂等技术方案,高可用系统架构与技术选型

幂等概念来自于数学,在计算机科学中,幂等表示一次后、或多次请求某一资源,应该有同样的影响效果。在业务表现上一般是同样的数据效果,下面就常用的业务场景,来聊聊幂等的技术方案。-----------------数据层-----------------索引与事务根据业务需要,给表添加唯一索性或组合索引,防止产生脏数据。根据数

网络安全第一次作业

1、什么是防火墙防火墙是一种网络安全系统,它根据预先确定的安全规则监视和控制传入和传出的网络流量。其主要目的是阻止对计算机或网络的未经授权的访问,同时允许合法通信通过。防火墙可以在硬件、软件或两者的组合中实现,并且可以配置为根据各种条件(如IP地址、端口号和协议类型)过滤流量。防火墙还可以提供其他安全功能,例如入侵检测

自然语言处理技术之词向量:GloVe单词表示的全局向量(glove.840B.300d、glove.6B)

目录一、词向量介绍二、GloVe学习词向量的词嵌入模型三、词向量入门(代码下载)四、训练五、模型概述六、可视化七、发布历史一、词向量介绍自然语言处理(NLP)中的词向量是将文本中的词汇表示为数值向量的技术。词向量的主要作用是将文本数据转换成计算机可以理解和处理的形式,以便进行各种NLP任务。以下是词向量在NLP中的主要

nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(三)

因为这个版本的若依plus不支持本地文件上传,所以需要增加这些本地上传文件的后端代码和前端代码修改。1、后端部分先配置跳过测试吧,平时编译也不需要这个<!--添加配置跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-s

热文推荐