单元测试Mock代码的自动生成方法及系统技术方案

技术编号:17878735 阅读:59 留言:0更新日期:2018-05-06 00:36
本发明专利技术公开了一种单元测试Mock代码的自动生成方法及系统,所述自动生成方法包括:预先配置不需要进行Mock的类和方法;扫描被测项目,获取对应的被测方法及其依赖的类和方法;判断依赖的类和方法是否属于不需要进行Mock,若否,筛选并得到每个被测方法的需要进行Mock的目标类和目标方法;生成与每个被测方法对应的Mock代码,并组合成Mock内部类。本发明专利技术筛选出需要进行Mock的类和方法,能够对Mock代码按照测试方法的粒度进行分类,降低Mock代码使用时的筛选时间,增强自动生成Mock代码的有效性;具有自动生成实例及方法调用级别Mock代码的功能,降低手工实现此功能的人工成本,提高单元测试的效率。

Automatic generation method and system of unit test Mock code

The invention discloses an automatic generation method and system for unit testing Mock code, and the automatic generation method includes: pre configuring classes and methods that do not need to carry out Mock; scanning the measured items, obtaining the corresponding methods and their dependent classes and methods; determine whether the dependent classes and methods are not required to carry out the Mock If not, the target class and the target method of each Mock are screened and obtained, and the Mock code corresponding to each method is generated and combined into the Mock internal class. This invention has selected the classes and methods that need to carry out Mock. It can classify the Mock code according to the granularity of the test method, reduce the screening time of the Mock code in use, enhance the validity of the automatic generation of the Mock code, and have the function of automatically generating the instance and method calling the Mock code of the level, and reducing the person who implements this function manually. The cost of work improves the efficiency of unit testing.

【技术实现步骤摘要】
单元测试Mock代码的自动生成方法及系统
本专利技术涉及Mock代码
,特别涉及一种单元测试Mock(一种测试方法)代码的自动生成方法及系统。
技术介绍
现有技术中,单元测试Mock代码的自动生成方法是将被测项目对应的所有被测类的依赖进行全量Mock,而实际上许多依赖根本不需要也不适合进行Mock。当测试代码人员编写单元测试时,需要获取当前测试方法的Mock代码,由于现有方法生成的Mock代码是将所有被测类层面的依赖的Mock代码组织在一起,无法精确到被测方法级别的粒度,因此就需要在所有被测类的Mock代码中进行人工筛选,从而降低了编写单元测试的效率;另外,现有技术中自动生成的单元测试Mock代码只能做到被测类级别的Mock代码,无法自动生成实例及方法调用级别Mock代码的功能,即现有的单元测试Mock代码的自动生成方法对于不同实例和同一实例的不同次数的调用无法返回不同的期望值,需要编写测试代码的人员自行实现,从而提高了人工成本。
技术实现思路
本专利技术要解决的技术问题是为了克服现有技术中单元测试Mock代码的自动生成方法存在获取当前测试方法的Mock代码,需要人工筛选从而降低了编写单元测试的效率;同时,无法实现自动生成实例及方法调用级别Mock代码的功能,需要编写测试代码的人员自行实现,从而提高了人工成本等缺陷,目的在于提供一种单元测试Mock代码的自动生成方法及系统。本专利技术是通过下述技术方案来解决上述技术问题:本专利技术提供一种单元测试Mock代码的自动生成方法,所述自动生成方法包括:S1、预先配置不需要进行Mock的类和方法;S2、扫描被测项目,获取所述被测项目对应的被测方法,并获取每个所述被测方法依赖的类和方法;S3、判断每个所述被测方法依赖的类和方法是否属于预先配置的不需要进行Mock的类和方法,在判断为否时,则筛选并得到每个所述被测方法依赖的目标类和目标方法;S4、根据所述目标类和所述目标方法生成与每个所述被测方法对应的Mock代码,并将所述被测方法对应的Mock代码组合成Mock内部类。较佳地,步骤S2具体包括:S21、扫描被测项目,获取所述被测项目的所有的被测类;S22、获取每个所述被测类对应的所有的被测方法;S23、获取每个所述被测方法依赖的所有的类和方法。较佳地,步骤S4之后还包括:S5、将同一所述被测类的所有所述被测方法分别对应的Mock内部类组合形成Mock类;S6、根据所述Mock类自动生成对应的Mock类文件。较佳地,步骤S4中的所述根据所述目标类和所述目标方法生成与每个所述被测方法对应的Mock代码的步骤具体包括:S41、在每个所述目标类对应的Mock代码中增加用于记录调用次数的字段;S42、在每个所述目标方法中增加map类型的参数;其中,所述map类型的参数的自变量为所述字段的值,因变量为期望返回的Mock值;S43、根据所述字段的值从map类型的参数中获取所述Mock值对应的Mock代码;S44、根据每个所述被测方法依赖的每个所述目标类和每个所述目标方法,获取每个所述被测方法对应的Mock代码。较佳地,步骤S23具体包括:通过分析每个所述被测方法的源码或者编译后的字节码,获取每个所述被测方法的方法体内部的所有方法的调用情况,得到所述被测方法依赖的所有类和方法。较佳地,步骤S1中的所述不需要进行Mock的类和方法包括:类名、类名的前缀名、方法名、方法名的前缀名和方法名的后缀名中的至少一种。本专利技术还提供一种单元测试Mock代码的自动生成系统,所述自动生成系统包括配置模块、扫描模块、获取模块、判断模块、代码生成模块和第一组合模块;所述配置模块用于预先配置不需要进行Mock的类和方法;所述扫描模块用于扫描被测项目;所述获取模块用于获取所述被测项目对应的被测方法,并获取每个所述被测方法依赖的类和方法;所述判断模块用于判断每个所述被测方法依赖的类和方法是否属于预先配置的不需要进行Mock的类和方法,在判断为否时,则筛选并得到每个所述被测方法依赖的目标类和目标方法;所述代码生成模块用于根据所述目标类和所述目标方法生成与每个所述被测方法对应的Mock代码,并调用所述第一组合模块;所述第一组合模块用于将所述被测方法对应的Mock代码组合成Mock内部类。较佳地,所述扫描模块用于扫描被测项目,获取所述被测项目的所有的被测类;所述获取模块用于获取每个所述被测类对应的所有的被测方法;所述获取模块还用于获取每个所述被测方法依赖的所有的类和方法。较佳地,所述自动生成系统还包括第二组合模块和文件生成模块;所述第二组合模块用于将同一所述被测类的所有所述被测方法分别对应的Mock内部类组合形成Mock类;所述文件生成模块用于根据所述Mock类自动生成对应的Mock类文件。较佳地,所述代码生成模块包括字段增加单元、参数增加单元和代码生成单元;所述字段增加单元用于在每个所述目标类对应的Mock代码中增加用于记录调用次数的字段;所述参数增加单元用于在每个所述目标方法中增加map类型的参数;其中,所述map类型的参数的自变量为所述字段的值,因变量为期望返回的Mock值;所述代码生成单元用于根据所述字段的值从map类型的参数中获取所述Mock值对应的Mock代码;所述代码生成单元还用于根据每个所述被测方法依赖的每个所述目标类和每个所述目标方法,获取每个所述被测方法对应的Mock代码。较佳地,所述获取模块用于通过分析每个所述被测方法的源码或者编译后的字节码,获取每个所述被测方法的方法体内部的所有方法的调用情况,得到所述被测方法依赖的所有类和方法。较佳地,所述不需要进行Mock的类和方法包括:类名、类名的前缀名、方法名、方法名的前缀名和方法名的后缀名中的至少一种。本专利技术的积极进步效果在于:本专利技术筛选出需要进行Mock的类和方法,能够对Mock代码按照测试方法的粒度进行分类,降低Mock代码使用时的筛选时间,提高易用性,增强自动生成Mock代码的有效性;同时,具有自动生成实例及方法调用级别Mock代码的功能,降低手工实现此功能的人工成本,提高单元测试的效率。附图说明图1为本专利技术实施例1的单元测试Mock代码的自动生成方法的流程图;图2为本专利技术实施例2的单元测试Mock代码的自动生成系统的模块示意图。具体实施方式下面通过实施例的方式进一步说明本专利技术,但并不因此将本专利技术限制在所述的实施例范围之中。实施例1如图1所示,本实施例的单元测试Mock代码的自动生成方法包括:S101、预先配置不需要进行Mock的类和方法;其中,不需要进行Mock的类和方法包括:类名、类名的前缀名、方法名、方法名的前缀名和方法名的后缀名中的至少一种。S102、扫描被测项目,获取所述被测项目对应的被测方法,并获取每个所述被测方法依赖的类和方法;具体地,步骤S102包括:S1021、扫描被测项目,获取所述被测项目的所有的被测类;S1022、获取每个所述被测类对应的所有的被测方法;S1023、获取每个所述被测方法依赖的所有的类和方法。其中,步骤S1023具体包括:通过分析每个所述被测方法的源码或者编译后的字节码,获取每个所述被测方法的方法体内部的所有方法的调用情况,得到所述被测方法依赖的所有类和方法。S103、判断每个所述被测方法依赖的类和方法是否本文档来自技高网...
单元测试Mock代码的自动生成方法及系统

【技术保护点】
一种单元测试Mock代码的自动生成方法,其特征在于,所述自动生成方法包括:S1、预先配置不需要进行Mock的类和方法;S2、扫描被测项目,获取所述被测项目对应的被测方法,并获取每个所述被测方法依赖的类和方法;S3、判断每个所述被测方法依赖的类和方法是否属于预先配置的不需要进行Mock的类和方法,在判断为否时,则筛选并得到每个所述被测方法依赖的目标类和目标方法;S4、根据所述目标类和所述目标方法生成与每个所述被测方法对应的Mock代码,并将所述被测方法对应的Mock代码组合成Mock内部类。

【技术特征摘要】
1.一种单元测试Mock代码的自动生成方法,其特征在于,所述自动生成方法包括:S1、预先配置不需要进行Mock的类和方法;S2、扫描被测项目,获取所述被测项目对应的被测方法,并获取每个所述被测方法依赖的类和方法;S3、判断每个所述被测方法依赖的类和方法是否属于预先配置的不需要进行Mock的类和方法,在判断为否时,则筛选并得到每个所述被测方法依赖的目标类和目标方法;S4、根据所述目标类和所述目标方法生成与每个所述被测方法对应的Mock代码,并将所述被测方法对应的Mock代码组合成Mock内部类。2.如权利要求1所述的单元测试Mock代码的自动生成方法,其特征在于,步骤S2具体包括:S21、扫描被测项目,获取所述被测项目的所有的被测类;S22、获取每个所述被测类对应的所有的被测方法;S23、获取每个所述被测方法依赖的所有的类和方法。3.如权利要求2所述的单元测试Mock代码的自动生成方法,其特征在于,步骤S4之后还包括:S5、将同一所述被测类的所有所述被测方法分别对应的Mock内部类组合形成Mock类;S6、根据所述Mock类自动生成对应的Mock类文件。4.如权利要求1所述的单元测试Mock代码的自动生成方法,其特征在于,步骤S4中的所述根据所述目标类和所述目标方法生成与每个所述被测方法对应的Mock代码的步骤具体包括:S41、在每个所述目标类对应的Mock代码中增加用于记录调用次数的字段;S42、在每个所述目标方法中增加map类型的参数;其中,所述map类型的参数的自变量为所述字段的值,因变量为期望返回的Mock值;S43、根据所述字段的值从map类型的参数中获取所述Mock值对应的Mock代码;S44、根据每个所述被测方法依赖的每个所述目标类和每个所述目标方法,获取每个所述被测方法对应的Mock代码。5.如权利要求2所述的单元测试Mock代码的自动生成方法,其特征在于,步骤S23具体包括:通过分析每个所述被测方法的源码或者编译后的字节码,获取每个所述被测方法的方法体内部的所有方法的调用情况,得到所述被测方法依赖的所有类和方法;和/或,步骤S1中的所述不需要进行Mock的类和方法包括:类名、类名的前缀名、方法名、方法名的前缀名和方法名的后缀名中的至少一种。6.一种单元测试Mock代码的自动生成系统,其特征在于,所述自动生成系统包括配置模块、扫描模块、获取模块、判断模块、...

【专利技术属性】
技术研发人员:时宇翔虞斌王海兵
申请(专利权)人:携程旅游网络技术上海有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1