[发明专利]一种单元测试代码生成方法、装置、设备及介质在审
申请号: | 202211553547.5 | 申请日: | 2022-12-06 |
公开(公告)号: | CN115934533A | 公开(公告)日: | 2023-04-07 |
发明(设计)人: | 姚辉 | 申请(专利权)人: | 重庆紫光华山智安科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 重庆中之信知识产权代理事务所(普通合伙) 50213 | 代理人: | 梁欣 |
地址: | 400700 重庆市*** | 国省代码: | 重庆;50 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 单元测试 代码 生成 方法 装置 设备 介质 | ||
本发明提供了一种单元测试代码生成方法,包括如下步骤:解析目标方法源码编译后的字节码文件,得到目标方法的字节码信息;从字节码信息中提取分支判断逻辑的条件表达式,并将条件表达式保存至条件表达式列表;为条件表达式列表中的各条件表达式生成满足以及不满足条件表达式的条件的模拟值,并将模拟值保存至模拟值列表;根据模拟值列表中各模拟值生成单元测试代码。本发明还公开了一种单元测试代码生成装置、电子设备及计算机可读介质。本发明通过分析字节码中的分支判断逻辑,为变量生成满足以及不满足各种条件的模拟值,确保单元测试代码能覆盖尽量多的代码,显著提升了单元测试的路径覆盖率,可有效减少代码漏测,提升单元测试质量。
技术领域
本发明涉及软件单元测试技术领域,尤其涉及一种单元测试代码生成方法、装置、电子设备及计算机可读介质。
背景技术
单元测试是对软件程序中的最小可测试单元进行检查和验证,在软件系统开发生命周期中,单元测试有着非常重要的作用,但是往往编写单元测试代码的工作量甚至会超过功能开发的工作量,所以开发者一般会通过插件自动生成单元测试代码。
目前已知的插件有很多,其中功能比较完善的实现了以下功能:
1、测试代码生成;
2、测试数据模拟(模拟方法入参和第三方调用返回值MOCK);
3、方法返回值断言(判断方法返回值与预期是否符合)。
现有的插件能帮助开发者快速生成单元测试代码,但是都没有考虑单元测试中一项非常重要的指标“路径覆盖率”。路径覆盖又称断言覆盖,它度量了是否将方法的每一个分支都被执行了。目前已有的插件在测试数据模拟方面,有的直接赋值null,有的根据变量类型随机赋值或直接给赋值该类型的默认值,无法保证能执行到所有的分支逻辑。
从上面的问题我们可以看出,现有插件没有考虑提升“路径覆盖率”,需要开发者根据代码分支逻辑手动去修改变量值以确保执行到更多的分支,而由开发者确认往往容易产生遗留的情况导致漏测,从而将问题带入到测试环节,增加质量保障成本。
发明内容
针对现有技术中所存在的不足,本发明提供了一种单元测试代码生成方法、装置、电子设备及计算机可读介质,其解决了现有技术中存在的路径覆盖率不高、容易漏测的问题。
第一方面,一种单元测试代码生成方法,包括:
解析目标方法源码编译后的字节码文件,得到所述目标方法的字节码信息;
从所述字节码信息中提取分支判断逻辑的条件表达式,并将所述条件表达式保存至条件表达式列表中;
为所述条件表达式列表中的各个条件表达式生成满足以及不满足所述条件表达式的条件的模拟值,并将所述模拟值保存至模拟值列表中;
根据所述模拟值列表中各个模拟值生成单元测试代码。
作为优选实施例,所述从所述字节码信息中提取分支判断逻辑的条件表达式,并将所述条件表达式保存至条件表达式列表中,包括:
表达式提取步骤:从所述目标方法的字节码信息中获取分支判断逻辑,并从中提取所有的条件表达式;
表达式整理步骤:对所述条件表达式进行整理,得到不重复的单条件表达式;
当所述单条件表达式中存在比较运算时,从所述单条件表达式中提取所述比较运算对应的比较值表达式和被比较值表达式,并将同一单条件表达式中的比较值表达式和被比较值表达式中存在的多个常量合并;
根据所述单条件表达式中的变量个数,将所述单条件表达式分别归入单变量条件表达式列表或多变量条件表达式列表。
作为优选实施例,所述表达式整理步骤,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于重庆紫光华山智安科技有限公司,未经重庆紫光华山智安科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211553547.5/2.html,转载请声明来源钻瓜专利网。