[发明专利]一种Java单元测试中动态插桩的方法在审
申请号: | 202310089505.9 | 申请日: | 2023-02-09 |
公开(公告)号: | CN116302966A | 公开(公告)日: | 2023-06-23 |
发明(设计)人: | 邓一波;李文俊;龚旭 | 申请(专利权)人: | 南京万米信息技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京佰腾智信知识产权代理事务所(普通合伙) 32509 | 代理人: | 胡丽华 |
地址: | 210012 江苏省南京*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 java 单元测试 动态 方法 | ||
本发明公开了一种Java单元测试中动态插桩的方法,属于大数据技术领域,包括定义定义三类点接口、埋入点声明和埋入点,解决通过声明点和埋入点的方式根据用户测试场景不同,提供不同的点实现内容的技术问题,本发明覆盖全面,对比JMockit,本发明通过插桩可以进行更多测试场景覆盖,包括不限于极端测试条件构造、多线程场景下测试、进程/服务停机测试的等场景,灵活,对比JMockit埋点声明位置跟随业务代码而不是跟随单元测试代码。
技术领域
本发明属于大数据技术领域,尤其涉及一种Java单元测试中动态插桩的方法。
背景技术
JAVA代码编写完成后,主流的单元测试方案是通过junit框架进行单元测试。
但是代码测试时,方法之间难免存在耦合,待测试的方法为了完成其功能需求难免会调用其他方法,而被调用的方法可能由于以下原因,无法在测试时可以正常使用:
1.被调用的方法,由其他人开发,目前尚未实现,只是个接口;
2.被调用的方法依赖于运行环境,测试环境无法正常运行,如网络服务,数据库服务等。
这个时候如果想测试该方法,需要绕过其内部调用的这些不可运行的方法,通过Mock(插桩)这些方法来完成。
JAVA常见的开源Mock框架有Mockito、JMock与JMockit等。
目前的现有技术无法解决下面的3类场景的测试需求:
场景1:极端测试条件根据当前时间戳文件生成文件,如果文件已存在时,提示建立失败。但是因为无法在建立文件那一刻,人为构建一个已经存在文件,导致无法测试建立失败场景。无法完成用户需要真实测试该场景下的执行结果是否满足预期的要求。(同样的场景包括不限于,磁盘满,内存满,线程满等极端场景构造)
场景2:多线程场景下无法完成两个互斥条件的同时经由不同线程调用的模拟。
场景3:当任务运行到一半时,突然中止(比如模拟服务断电,异常重启);现有技术不能测试当服务重新启动时,能否将执行一半的任务重新执行。
发明内容
本发明的目的是提供一种Java单元测试中动态插桩的方法,解决通过声明点和埋入点的方式根据用户测试场景不同,提供不同的点实现内容的技术问题。
为实现上述目的,本发明采用如下技术方案:一种Java单元测试中动态插桩的方法,包括如下步骤:
步骤1:建立待测代码输入模块和Java单元代码测试服务器,用户在待测代码输入模块中输入待测代码,待测代码输入模块通过互联网将待测代码传送给Java单元代码测试服务器;
在Java单元代码测试服务器中建立测试代码缓存模块、声明点模块和埋入点模块,测试代码缓存模块获取并存储待测代码;
步骤2:在声明点模块中定义点接口的名称,其中点的类型包括三类:通用型点、替换型点和中断型点;
分别定义三类点接口;
步骤3:在声明点模块中,进行埋点声明,具体操作如下:
步骤S3-1:内存中获取全局点图,获取存放点的点列表;
步骤S3-2:判断用户是否开启了动态插桩功能:如果未开启则不进行任何操作并返回;如果开启,则执行步骤S3-3;
步骤S3-3:在待测代码的任意位置,对埋入的点进行声明,并生成点的关键字;
步骤4:在埋入点模块中,在待测代码中进行埋点,具体包括如下步骤:
步骤S4-1:内存中获取全局点图;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京万米信息技术有限公司,未经南京万米信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310089505.9/2.html,转载请声明来源钻瓜专利网。