本技术涉及大数据,尤其涉及一种单元测试方法、装置、设备、介质及程序产品。
背景技术:
1、在金融机构中,针对不同的业务需要进行大量的软件开发,单元测试作为软件开发中最小可测试单元进行的检查和验证的手段,因其能帮助开发人员及早发现并修复代码中的错误等特性,在金融机构中得到了广泛应用。
2、模拟(mock)技术是单元测试中常用的测试方法,通过模拟真实对象或系统的行为,以实现针对目标测试单元的独立的测试和验证。但在java中,对于采用静态(static)和最终(final)修饰的变量,即静态最终(static-final)变量,基于其常量特性、类级别的变量特性、单一实例特性等,导致难以对静态最终(static-final)变量进行模拟(mock),从而导致包含static-final修饰属性的单元测试过程无法正常进行。
3、相关技术中,通过改变原被测单元(代码)中static-final修饰的成员变量值,来实现对static-final变量的模拟,此种方式难以快速识别被测单元中static-final变量的范围,一方面极易导致赋值错误,影响测试精度,另一方面需要对原代码进行更改,还会影响测试安全性及测试效率。
技术实现思路
1、本技术提供一种单元测试方法、装置、设备、介质及程序产品,以至少解决上述技术问题。
2、根据本技术的第一方面,提供一种单元测试方法,包括:
3、根据单元测试案例中的被测目标单元,确定待模拟的静态最终变量;
4、扫描所述被测目标单元的代码范围,以获取所述代码范围中所述静态最终变量对应代码的引用位置;
5、在创建所述被测目标单元的模拟实例时,根据所述引用位置,确定所述模拟实例中的模拟作用域,所述模拟作用域用于限定所述静态最终变量的模拟范围;
6、根据所述模拟实例及其模拟作用域,执行所述被测目标单元的测试过程,得到测试结果。
7、在一种实施方式中,所述方法还包括:
8、基于代码增强技术,在所述被测目标单元中增加用于读取所述静态最终变量的值的无参静态方法;
9、所述根据所述引用位置,确定所述模拟实例中的模拟作用域,包括:
10、根据所述引用位置,确定所述无参静态方法的替换位置,所述替换位置是将所述静态最终变量对应代码替换为所述无参静态方法的位置;
11、根据所述无参静态方法的替换位置,确定所述模拟实例中的模拟作用域。
12、在一种实施方式中,所述方法还包括:
13、根据预设规则,确定关于所述静态最终变量的替代函数访问方法名;
14、其中,所述替代函数访问方法名用于访问所述静态最终变量,所预设规则包括与所述被测目标单元所包含的方法名称之间存在语义区别的排除规则。
15、在一种实施方式中,所述方法还包括:
16、将所述替代函数访问方法名确定为所述无参静态方法的函数名称;
17、所述基于代码增强技术,在所述被测目标单元中增加用于读取所述静态最终变量的值的无参静态方法,包括:
18、基于代码增强技术和所述无参静态方法的函数名称,在所述被测目标单元中增加用于读取所述静态最终变量的值的无参静态方法。
19、在一种实施方式中,所述方法还包括:
20、基于静态方法模拟工具,创建所述被测目标单元的模拟实例,所述模拟实例包括所述模拟作用域,以及针对所述模拟作用域中对无参静态方法进行执行的存根,所述存根用于返回针对所述静态最终变量的模拟对象或者可实际执行类型。
21、在一种实施方式中,所述根据单元测试案例中的被测目标单元,确定待模拟的静态最终变量,包括:
22、扫描所述被测目标单元的代码范围,获取所述代码范围中所有采用静态修饰符和最终修饰符共同修饰的变量,以确定所述待模拟的静态最终变量。
23、在一种实施方式中,所述根据所述模拟实例及其模拟作用域,执行所述被测目标单元的测试过程,包括:
24、根据所述单元测试案例携带的测试规则,和所述模拟实例及其模拟作用域,执行所述被测目标单元的测试过程;其中,所述测试规则包括异常测试规则和/或性能测试规则。
25、根据本技术的第二方面,还提供一种单元测试装置,包括:
26、属性确定模块,其设置为根据单元测试案例中的被测目标单元,确定待模拟的静态最终变量;
27、引用获取模块,其设置为扫描所述被测目标单元的代码范围,以获取所述代码范围中所述静态最终变量对应代码的引用位置;
28、作用域确定模块,其设置为在创建所述被测目标单元的模拟实例时,根据所述引用位置,确定所述模拟实例中的模拟作用域,所述模拟作用域用于限定所述静态最终变量的模拟范围;
29、测试模块,其设置为根据所述模拟实例及其模拟作用域,执行所述被测目标单元的测试过程,得到测试结果。
30、在一种实施方式中,所述装置还包括:
31、增强模块,其设置为基于代码增强技术,在所述被测目标单元中增加用于读取所述静态最终变量的值的无参静态方法;
32、所述作用域确定模块,包括:
33、替换确定单元,其设置为根据所述引用位置,确定所述无参静态方法的替换位置,所述替换位置是将所述静态最终变量对应代码替换为所述无参静态方法的位置;
34、确定单元,其设置为根据所述无参静态方法的替换位置,确定所述模拟实例中的模拟作用域。
35、在一种实施方式中,所述装置还包括:
36、函数名确定模块,其设置为根据预设规则,确定关于所述静态最终变量的替代函数访问方法名;其中,所预设规则包括与所述被测目标单元所包含的方法名称之间存在语义区别的排除规则;
37、所述增强模块,具体设置为基于代码增强技术,根据所述替代函数访问方法名在所述被测目标单元中增加用于读取所述静态最终变量的值的无参静态方法。
38、根据本技术的第二方面,还提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
39、所述存储器存储计算机执行指令;
40、所述处理器执行所述存储器存储的计算机执行指令,以实现上述第一方面提供的单元测试方法。
41、根据本技术第三方面,还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上述第一方面提供的单元测试方法。
42、根据本技术的第四方面,还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述第一方面提供的单元测试方法。
43、本技术实施例提供的单元测试方法、装置、设备、介质及程序产品,利用被测目标单元中待模拟的静态最终变量及对应的引用位置,在创建模拟实例时确定模拟实例所对应的模拟作用域,并针对该模拟作用域对被测目标单元进行模拟测试,采用模拟作用域的范围限定方式,可以有效的控制基于模拟实例的模拟过程中引用静态最终变量的代码的影响范围,由此即可以解决对静态最终变量的模拟问题,且无需对原被测目标单元中代码进行修改,从而提高了单元测试安全性、测试精度及测试效率。