[发明专利]一种Java单元测试中动态插桩的方法在审
| 申请号: | 202310089505.9 | 申请日: | 2023-02-09 |
| 公开(公告)号: | CN116302966A | 公开(公告)日: | 2023-06-23 |
| 发明(设计)人: | 邓一波;李文俊;龚旭 | 申请(专利权)人: | 南京万米信息技术有限公司 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 南京佰腾智信知识产权代理事务所(普通合伙) 32509 | 代理人: | 胡丽华 |
| 地址: | 210012 江苏省南京*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 java 单元测试 动态 方法 | ||
1.一种Java单元测试中动态插桩的方法,其特征在于:包括如下步骤:
步骤1:建立待测代码输入模块和Java单元代码测试服务器,用户在待测代码输入模块中输入待测代码,待测代码输入模块通过互联网将待测代码传送给Java单元代码测试服务器;
在Java单元代码测试服务器中建立测试代码缓存模块、声明点模块和埋入点模块,测试代码缓存模块获取并存储待测代码;
步骤2:在声明点模块中定义点接口的名称,其中点的类型包括三类:通用型点、替换型点和中断型点;
分别定义三类点接口;
步骤3:在声明点模块中,进行埋点声明,具体操作如下:
步骤S3-1:内存中获取全局点图,获取存放点的点列表;
步骤S3-2:判断用户是否开启了动态插桩功能:如果未开启则不进行任何操作并返回;如果开启,则执行步骤S3-3;
步骤S3-3:在待测代码的任意位置,对埋入的点进行声明,并生成点的关键字;
步骤4:在埋入点模块中,在待测代码中进行埋点,具体包括如下步骤:
步骤S4-1:内存中获取全局点图;
步骤S4-2:判断用户是否开启了动态插桩功能:如果未开启则不进行任何操作并返回;如果开启,则执行步骤S4-3;
步骤S4-3:将点声明处被调用时方法栈中倒数第二个类、点声明处被调用时方法栈中倒数第二个方法、点声明处被调用时方法栈中倒数第一个类、点声明处被调用时方法栈中倒数第一个方法和点声明处定义的操作名称组合作为点的关键字进行查询;
步骤S4-4:根据点的关键字,从点图中调取点列表,在点列表中查询点是否存在:如不存在,则将点放入内存中,执行步骤S4-5;如存在,则执行步骤S4-7;
步骤S4-5:通过点的关键字从点图中重新调取点列表;
步骤S4-6:根据点将被重复埋入的次数,循环将埋入的点添加到点列表中;
步骤S4-7:埋点结束;
步骤5:声明点模块通过点的关键字从点图中重新调取点列表;
步骤6:判断获取到的点列表是否为空,如果点列表为空则直接返回否则继续;
步骤7:从点列表删除并获取一个用户埋入的点,在埋入的点对应的声明处执行点。
2.如权利要求1所述的一种Java单元测试中动态插桩的方法,其特征在于:定义的三类点接口对应的方法具体包括:
通用型点的点接口对应的方法为将用户埋入点时传入的参数列表为参数,执行当点被调用时,在点中进行某种预置条件构建或抛出任何异常;
替换型点的点接口对应的方法为将用户声明处执行某个方法的原始返回值和用户声明埋入点时传入的参数列表作为参数,执行当点被调用时,将原始的返回值进行替换;
中断型点的点接口对应的方法为将用户声明埋入点时传入的参数列表作为参数,执行当点被调用时,根据传入参数,判断是否需要中断,如果需要中断那么返回列表的第一个值为true;其中,参数列表的返回值为是否进行中断和提前返回是否对测试代码流程产生影响。
3.如权利要求1所述的一种Java单元测试中动态插桩的方法,其特征在于:在执行步骤3时,具体根据点的类型分别采用三种方法进行埋入点声明,具体包括:
方法3-1:声明埋入通用型点的方法具体为将向上获取方法栈的次数和点的操作名称作为参数,执行在声明处,从内存中查找匹配的点并且执行;
方法3-2:声明埋入替换型点的方法具体为将向上获取方法栈的次数、点的操作名称、声明处执行某个方法的原始返回值和声明埋入点时传入的参数列表作为参数,执行在声明处,从内存中查找匹配的点并且执行;
方法3-3:声明埋入中断型点的方法具体为将向上获取方法栈的次数、点的操作名称和声明埋入点时传入的参数列表作为参数,执行在声明处,从内存中查找匹配的点并且执行,返回执行结果。
4.如权利要求3所述的一种Java单元测试中动态插桩的方法,其特征在于:在方法3-1、方法3-2和方法3-3中,均以方法栈的次数和点的操作名称组合成型点的关键字,用于在声明处查询到点。
5.如权利要求1所述的一种Java单元测试中动态插桩的方法,其特征在于:所述点图的结构为:
MapString,ArrayListIBuryingPointTExceptionpointMap;
其中map的key用于存放点的关键字,map的value用于存放点的点列表pointList。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京万米信息技术有限公司,未经南京万米信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310089505.9/1.html,转载请声明来源钻瓜专利网。





