本技术涉及大数据,尤其涉及一种应用于匿名类型实例的单元测试代码生成方法和装置。
背景技术:
1、随着单元测试技术和单元测试代码生成辅助技术的发展,一种可能的实施方式中,可以基于数据库表和标准模板的单元测试代码生成技术,来生成单元测试代码。例如,可以基于spring框架下的面向切面编程aop(aspect-oriented programming)技术,来采集测试数据,并基于采集的测试数据进行自动化单元测试用例编写,来生成单元测试代码,从而基于该单元测试代码进行单元测试。
2、由于在根据单元测试代码进行单元测试时,需要基于mockito技术隔离被测试代码。此时,在被mock对象的入参为匿名对象类型时,由于被mock对象不会像真实对象一样执行匿名对象类型的入参,就无法基于现有的面向切面编程aop技术,来采集匿名函数式对应的内部实例的真实测试数据,导致在单元测试过程中,存在大量未覆盖的代码,从而降低了代码测试过程中的代码覆盖率,影响了代码测试效果。
技术实现思路
1、本技术提供一种应用于匿名类型实例的单元测试代码生成方法和装置,用以解决现有的单元测试技术中所存在的代码测试覆盖率低,测试效果差的问题。
2、第一方面,本技术提供一种应用于匿名类型实例的单元测试代码生成方法,所述方法包括:
3、根据对应的数据采集方式,从第一业务场景中分别采集第一数据和第二数据;其中,所述第一业务场景指示真实测试场景;所述第一数据指示第一业务场景中与被测方法和所述被测方法所依赖的依赖方法相关联的数据;所述第二数据指示与所述被测方法所生成的匿名类型实例相对应的执行方法相关联的数据;所述匿名类型实例相对应的执行方法指示所述依赖方法在接收所述匿名类型实例作为入参数据之后所调用的方法;
4、确定与所述第一数据相匹配的测试用例模板以及与所述匿名类型实例相对应的执行方法相匹配的方法调用模板,并将所述方法调用模板,添加至所述测试用例模板中的对应位置处,得到待填充模板;
5、将所述第一数据和所述第二数据,填充至所述待填充模板中,生成单元测试代码。
6、在一种可能的实施方式中,根据对应的数据采集方式,从第一业务场景中采集第一数据,包括:
7、确定数据采集范围;其中,所述数据采集范围指示包含生成匿名类型实例的被测方法的所在范围;
8、在所述数据采集范围内,根据面向切面编程aop技术,从第一业务场景中采集第一数据。
9、在一种可能的实施方式中,确定数据采集范围,包括:
10、根据所述面向切面编程aop技术,从第二业务场景中采集第三数据;其中,所述第二业务场景指示与所述第一业务场景不同的真实测试场景;所述第三数据表征与多种被测方法相关联的数据;
11、确定所述第二业务场景中的,入参类型为匿名实例类型的目标方法;其中,所述目标方法指示依赖方法;
12、基于依赖所述目标方法的被测方法的所在范围,确定所述数据采集范围。
13、在一种可能的实施方式中,基于依赖所述目标方法的被测方法的所在范围,确定所述数据采集范围,包括:
14、根据依赖所述目标方法的被测方法的单元测试范围,确定所述数据采集范围。
15、在一种可能的实施方式中,根据对应的数据采集方式,从第一业务场景中采集第二数据,包括:
16、确定所述匿名类型实例相对应的执行方法的所在位置;
17、根据字节码增强技术,在所述匿名类型实例相对应的执行方法的所在位置处,添加数据采集代码;
18、基于所述数据采集代码,从所述第一业务场景中采集第二数据。
19、在一种可能的实施方式中,确定与所述匿名类型实例相对应的执行方法相匹配的方法调用模板,包括:
20、确定与所述匿名类型实例相匹配的实例捕获模板,以及与所述匿名类型实例相对应的执行方法相匹配的方法执行模板;
21、基于所述实例捕获模板和所述方法执行模板,确定所述方法调用模板。
22、第二方面,本技术提供一种应用于匿名类型实例的单元测试代码生成装置,包括:
23、采集单元,用于根据对应的数据采集方式,从第一业务场景中分别采集第一数据和第二数据;其中,所述第一业务场景指示真实测试场景;所述第一数据指示第一业务场景中与被测方法和所述被测方法所依赖的依赖方法相关联的数据;所述第二数据指示与所述被测方法所生成的匿名类型实例相对应的执行方法相关联的数据;所述匿名类型实例相对应的执行方法指示所述依赖方法在接收所述匿名类型实例作为入参数据之后所调用的方法;
24、确定单元,用于确定与所述第一数据相匹配的测试用例模板以及与所述匿名类型实例相对应的执行方法相匹配的方法调用模板,并将所述方法调用模板,添加至所述测试用例模板中的对应位置处,得到待填充模板;
25、生成单元,用于将所述第一数据和所述第二数据,填充至所述待填充模板中,生成单元测试代码。
26、在一种可能的实施方式中,采集单元包括第一采集单元,用于:
27、确定数据采集范围;其中,所述数据采集范围指示包含生成匿名类型实例的被测方法的所在范围;
28、在所述数据采集范围内,根据面向切面编程aop技术,从第一业务场景中采集第一数据。
29、在一种可能的实施方式中,第一采集单元,用于:
30、根据所述面向切面编程aop技术,从第二业务场景中采集第三数据;其中,所述第二业务场景指示与所述第一业务场景不同的真实测试场景;所述第三数据表征与多种被测方法相关联的数据;
31、确定所述第二业务场景中的,入参类型为匿名实例类型的目标方法;其中,所述目标方法指示依赖方法;
32、基于依赖所述目标方法的被测方法的所在范围,确定所述数据采集范围。
33、在一种可能的实施方式中,第一采集单元,用于:
34、根据依赖所述目标方法的被测方法的单元测试范围,确定所述数据采集范围。
35、在一种可能的实施方式中,采集单元包括第二采集单元,用于:
36、确定所述匿名类型实例相对应的执行方法的所在位置;
37、根据字节码增强技术,在所述匿名类型实例相对应的执行方法的所在位置处,添加数据采集代码;
38、基于所述数据采集代码,从所述第一业务场景中采集第二数据。
39、在一种可能的实施方式中,确定单元,用于:
40、确定与所述匿名类型实例相匹配的实例捕获模板,以及与所述匿名类型实例相对应的执行方法相匹配的方法执行模板;
41、基于所述实例捕获模板和所述方法执行模板,确定所述方法调用模板。
42、第三方面,本技术实施例提供一种计算机设备,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的应用于匿名类型实例的单元测试代码生成方法。
43、第四方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的应用于匿名类型实例的单元测试代码生成方法。
44、第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如上第一方面以及第一方面各种可能的设计所述的应用于匿名类型实例的单元测试代码生成方法。
45、本技术提供的应用于匿名类型实例的单元测试代码生成方法和装置,可以根据对应的数据采集方式,从第一业务场景中分别采集第一数据和第二数据,从而能够得到第一业务场景中的与被测方法和依赖方法相关联的数据,还能得到第一业务场景中的,与被测方法所生成的匿名类型实例相对应的执行方法相关联的数据,从而能够更加全面、准确的获取真实测试数据,扩大了数据采集范围,进而有助于提升基于该真实测试数据所生成的测试用例的全面性和准确性。之后,可以确定与第一数据相匹配的测试用例模板以及与匿名类型实例相对应的执行方法相匹配的方法调用模板,并将方法调用模板添加至测试用例模板中,得到待填充模板,从而能够保证待填充模板能够实现对匿名类型实例相对应的执行方法的调用。此时,在将第一数据和第二数据,填充至待填充模板中之后,可以生成单元测试代码,从而使生成的单元测试代码,能够在依赖方法被模拟处理之后,仍能执行依赖方法的内部逻辑,从而提高了代码测试覆盖率,提升了单元测试效果。
1.一种应用于匿名类型实例的单元测试代码生成方法,其特征在于,所述方法包括:
2.根据权利要求1所述的单元测试代码生成方法,其特征在于,根据对应的数据采集方式,从第一业务场景中采集第一数据,包括:
3.根据权利要求2所述的单元测试代码生成方法,其特征在于,确定数据采集范围,包括:
4.根据权利要求3所述的单元测试代码生成方法,其特征在于,基于依赖所述目标方法的被测方法的所在范围,确定所述数据采集范围,包括:
5.根据权利要求1所述的单元测试代码生成方法,其特征在于,根据对应的数据采集方式,从第一业务场景中采集第二数据,包括:
6.根据权利要求1-5中任一项所述的单元测试代码生成方法,其特征在于,确定与所述匿名类型实例相对应的执行方法相匹配的方法调用模板,包括:
7.一种应用于匿名类型实例的单元测试代码生成装置,其特征在于,所述装置包括:
8.一种计算机设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-6中任一项所述的方法。
10.一种计算机程序产品,其特征在于,包括计算机程序,该计算机程序被处理器执行时实现权利要求1-6中任一项所述的方法。
