一种单元测试方法及装置制造方法及图纸

技术编号:30023224 阅读:38 留言:0更新日期:2021-09-11 06:48
本申请提供一种单元测试方法及装置,涉及软件测试领域,也可用于金融领域,所述方法包括:对被测功能代码及功能代码对应的测试代码分别进行语法分析,得到功能代码的方法信息和对象信息及测试代码的方法信息和对象信息;根据方法信息和对象信息确定进行模拟测试的点位及设置断言的点位;根据进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试。本申请能够对功能代码及功能代码对应的测试代码分别进行语法分析,确定需要进行模拟测试的点位及设置断言的点位,然后设置断言并启动模拟测试。拟测试。拟测试。

【技术实现步骤摘要】
一种单元测试方法及装置


[0001]本申请涉及软件测试领域,可以用于金融领域,具体是一种单元测试方法及装置。

技术介绍

[0002]目前市场上有一些自动生成单元测试代码的工具。这些工具可以通过对功能代码进行语法分析,结合代码分支特点进行全覆盖的单元测试代码自动生成。
[0003]但这种方法属于事后编写测试代码,即先有功能代码,后有测试代码。然而,单元测试驱动开发(UTDD)这种编程方法要求测试代码先行,即先有测试代码,后有功能代码。在编写代码的过程中功能代码与测试代码相互补全,相互完善,因此现有方法是不适用的。
[0004]另外,在测试功能代码的过程中,考虑到应尽量降低外界因素对功能代码测试的影响,往往需要设置断言(Assert),并进行模拟测试(Mock)。现有技术中,搜索需要断言(Assert)的位置及需要进行模拟测试(Mock)的位置往往依靠测试人员经验,容易出现漏搜及误搜,导致单元测试失效。

技术实现思路

[0005]针对现有技术中的问题,本申请提供一种单元测试方法及装置,能够对功能代码及功能代码对应的测试代码分别进行语法分析,确定需要进行模拟测试的点位及设置断言的点位,然后设置断言并启动模拟测试。
[0006]为解决上述技术问题,本申请提供以下技术方案:
[0007]第一方面,本申请提供一种单元测试方法,包括:
[0008]对被测功能代码及所述功能代码对应的测试代码分别进行语法分析,得到所述功能代码的方法信息和对象信息及所述测试代码的方法信息和对象信息;所述方法信息包括方法所属的代码段、方法所属的类、方法被调用的位置及历史模拟测试点位;所述对象信息包括对象所属的代码段、对象所属的类、对象所属的方法、对象被调用的位置及历史断言设置点位;
[0009]根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位;
[0010]根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试。
[0011]进一步地,所述对被测功能代码及所述功能代码对应的测试代码分别进行语法分析,得到所述功能代码的方法信息和对象信息及所述测试代码的方法信息和对象信息,包括:
[0012]对所述功能代码及所述测试代码分别进行语法分析,得到所述功能代码的代码结构和关键词及所述测试代码的代码结构和关键词;
[0013]根据所述功能代码的代码结构及关键词确定所述功能代码的方法信息及对象信息;
[0014]根据所述测试代码的代码结构和关键词确定所述测试代码的方法信息和对象信息。
[0015]进一步地,所述根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位,包括:
[0016]根据所述方法信息和对象信息确定有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象;
[0017]在有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象中,根据所述方法信息和对象信息确定使用Java工具开发包访问网络及系统IO进程的第一方法,并将所述第一方法确定为所述进行模拟测试的点位中的必要点位;
[0018]确定与所述第一方法属于同一个类的第二方法,将所述第二方法确定为所述进行模拟测试的点位中的建议点位;
[0019]在有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象中,根据所述对象信息确定被赋值过或改动过的对象,将所述被赋值过或改动过的对象确定为所述设置断言的点位。
[0020]进一步地,所述根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位,包括:
[0021]根据所述方法信息和对象信息确定无测试注解的方法和对象;
[0022]确定所述无测试注解的方法和对象是否被赋值过或更改过;
[0023]如果是,将所述无测试注解的方法和对象确定为所述设置断言的点位。
[0024]进一步地,所述根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试之前,还包括:
[0025]查询被确定为所述进行模拟测试的点位的方法在其被调用前是否已经进行过模拟测试;
[0026]如果否,在编译器上显示所述进行模拟测试的点位。
[0027]进一步地,所述根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试之前,还包括:
[0028]确定所述有测试注解的方法是否直接或间接访问过被确定为所述设置断言的点位的对象;
[0029]如果是,在编译器上显示所述设置断言的点位。
[0030]第二方面,本申请提供一种单元测试装置,包括:
[0031]方法对象信息确定单元,用于对被测功能代码及所述功能代码对应的测试代码分别进行语法分析,得到所述功能代码的方法信息和对象信息及所述测试代码的方法信息和对象信息;所述方法信息包括方法所属的代码段、方法所属的类、方法被调用的位置及历史模拟测试点位;所述对象信息包括对象所属的代码段、对象所属的类、对象所属的方法、对象被调用的位置及历史断言设置点位;
[0032]点位确定单元,用于根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位;
[0033]模拟测试单元,用于根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试。
[0034]进一步地,所述方法对象信息确定单元,包括:
[0035]代码结构和关键词确定模块,用于对所述功能代码及所述测试代码分别进行语法
分析,得到所述功能代码的代码结构和关键词及所述测试代码的代码结构和关键词;
[0036]功能方法对象信息确定模块,用于根据所述功能代码的代码结构及关键词确定所述功能代码的方法信息及对象信息;
[0037]测试方法对象信息确定模块,用于根据所述测试代码的代码结构和关键词确定所述测试代码的方法信息和对象信息。
[0038]进一步地,所述点位确定单元,包括:
[0039]测试注解方法对象确定模块,用于根据所述方法信息和对象信息确定有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象;
[0040]必要点位确定模块,用于在有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象中,根据所述方法信息和对象信息确定使用Java工具开发包访问网络及系统IO进程的第一方法,并将所述第一方法确定为所述进行模拟测试的点位中的必要点位;
[0041]建议点位确定模块,用于确定与所述第一方法属于同一个类的第二方法,将所述第二方法确定为所述进行模拟测试的点位中的建议点位;
[0042]断言点位确定模块,用于在有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象中,根据所述对象信息确定被赋值过或改动过的对象,将所述被赋值过或改动过的对象确定为所述设置断言的点位。
[0043]进一步地,所述点位确定单元,包括:
[0044]无测试注解的方法对象确定模块,用于根据所述方法信息和对本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种单元测试方法,其特征在于,包括:对被测功能代码及所述功能代码对应的测试代码分别进行语法分析,得到所述功能代码的方法信息和对象信息及所述测试代码的方法信息和对象信息;所述方法信息包括方法所属的代码段、方法所属的类、方法被调用的位置及历史模拟测试点位;所述对象信息包括对象所属的代码段、对象所属的类、对象所属的方法、对象被调用的位置及历史断言设置点位;根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位;根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试。2.根据权利要求1所述的单元测试方法,其特征在于,所述对被测功能代码及所述功能代码对应的测试代码分别进行语法分析,得到所述功能代码的方法信息和对象信息及所述测试代码的方法信息和对象信息,包括:对所述功能代码及所述测试代码分别进行语法分析,得到所述功能代码的代码结构和关键词及所述测试代码的代码结构和关键词;根据所述功能代码的代码结构及关键词确定所述功能代码的方法信息及对象信息;根据所述测试代码的代码结构和关键词确定所述测试代码的方法信息和对象信息。3.根据权利要求1所述的单元测试方法,其特征在于,所述根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位,包括:根据所述方法信息和对象信息确定有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象;在有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象中,根据所述方法信息和对象信息确定使用Java工具开发包访问网络及系统IO进程的第一方法,并将所述第一方法确定为所述进行模拟测试的点位中的必要点位;确定与所述第一方法属于同一个类的第二方法,将所述第二方法确定为所述进行模拟测试的点位中的建议点位;在有测试注解的方法、对象及被所述有测试注解的方法所调用过的方法、对象中,根据所述对象信息确定被赋值过或改动过的对象,将所述被赋值过或改动过的对象确定为所述设置断言的点位。4.根据权利要求1所述的单元测试方法,其特征在于,所述根据所述方法信息和对象信息确定进行模拟测试的点位及设置断言的点位,包括:根据所述方法信息和对象信息确定无测试注解的方法和对象;确定所述无测试注解的方法和对象是否被赋值过或更改过;如果是,将所述无测试注解的方法和对象确定为所述设置断言的点位。5.根据权利要求1所述的单元测试方法,其特征在于,所述根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试之前,还包括:查询被确定为所述进行模拟测试的点位的方法在其被调用前是否已经进行过模拟测试;如果否,在编译器上显示所述进行模拟测试的点位。6.根据权利要求3所述的单元测试方法,其特征在于,所述根据所述进行模拟测试的点位及设置断言的点位设置断言并启动模拟测试之前,还包括:
确定所述有测试注解的方法是否直接或间接访问过被确定为所述设置断言的点位的对象;如果是,在编译器上显示所述设置断言的点位。7.一种单元测试装置,其特征在于,包括:方法对象信息确定单元,用于对被测功能代码及所述功能代码对应的测试代码分别进行语法分析,得到所述功能代码的方法信息和对象信息及所述测试代码的方法信息和对象信息;所述方法信息包括方法所属的代码段、方法所属的类、方法被调用的位置及历史模拟测试点位;所述对象...

【专利技术属性】
技术研发人员:林慕云殷富成杜卫林李芳
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:

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

1