本技术涉及代码处理,尤其涉及一种测试代码生成方法、装置、设备及存储介质。
背景技术:
1、在软件系统的开发生命周期中,单元测试技术发挥着不可或缺的作用。然而,生成单元测试代码的过程极具挑战性。
2、目前,单元测试代码的生成技术包括基于标准模板的生成技术、基于生成式人工智能对话技术的生成技术以及基于逻辑推理的生成技术。
3、然而,上述生成单元测试代码的方式中,均没有给出一种不符合spring-bean对象的结构类型的java类型的单元测试代码的生成方案。
技术实现思路
1、本技术提供一种测试代码生成方法、装置、设备及存储介质,用以解决现有技术中无法提供一种复杂外部对象对应的单元测试代码的生成问题。
2、第一方面,本技术提供一种测试代码生成方法,包括:
3、根据面向切面编程aop技术,从实际业务场景获取第一单元测试用例数据,所述第一单元测试用例数据包括所述业务场景中各个对象类型的用例数据;
4、根据预定义的目标对象类型,从所述第一单元测试用例数据中确定出第二单元测试用例数据,所述目标对象类型为不符合java bean对象的结构要求的java类型;
5、根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码,所述入参和返回值比对校验模板是基于所述目标对象类型对应方法的参数特征和属性特征确定的;
6、根据所述目标对象类型对应的虚拟代码,生成单元测试代码。
7、在一种可能的设计中,所述根据预定义的目标对象类型,从所述第一单元测试用例数据中确定出第二单元测试用例数据,包括:
8、根据对象监视技术,从所述第一单元测试用例数据中确定出所述目标对象类型对应方法的入参实例;
9、根据所述目标对象类型对应方法的返回值的实例对象特征,通过java反射技术,从所述第一单元测试用例数据中确定出返回值实例;
10、其中,所述第二单元测试用例数据包括:所述入参实例和所述返回值实例。
11、在一种可能的设计中,在所述根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码之前,所述方法还包括:
12、根据所述目标对象类型对应方法的参数特征中参数对应的参数规则,确定入参比对校验模板;
13、根据所述目标对象类型对应方法的属性特征中的字符串匹配或json格式属性,确定返回值比对校验模板;
14、其中,所述入参和返回值比对校验模板包括:所述入参比对校验模板和所述返回值比对校验模板。
15、在一种可能的设计中,所述根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码,包括:
16、根据所述目标对象类型、所述第二单元测试用例数据、以及所述入参和返回值比对校验模板,确定用于生成虚拟对象和测试用例的基础数据;
17、根据所述用于生成虚拟对象和测试用例的基础数据,确定所述目标对象类型对应的虚拟代码。
18、在一种可能的设计中,所述根据所述目标对象类型对应的虚拟代码,生成单元测试代码,包括:
19、根据所述虚拟代码中的配置信息和预期行为,生成所述单元测试代码。
20、在一种可能的设计中,所述方法还包括:
21、获取待测试代码;
22、根据所述单元测试代码,对所述待测试代码进行测试,得到所述待测试代码的测试结果。
23、第二方面,本技术提供一种测试代码生成装置,包括:
24、获取模块,用于根据面向切面编程aop技术,从实际业务场景获取第一单元测试用例数据,所述第一单元测试用例数据包括所述业务场景中各个对象类型的用例数据;
25、确定模块,用于根据预定义的目标对象类型,从所述第一单元测试用例数据中确定出第二单元测试用例数据,所述目标对象类型为不符合java bean对象的结构要求的java类型;
26、第一生成模块,用于根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码,所述入参和返回值比对校验模板是基于所述目标对象类型对应方法的参数特征和属性特征确定的;
27、第二生成模块,用于根据所述目标对象类型对应的虚拟代码,生成单元测试代码。
28、在一种可能的设计中,所述确定模块,具体用于:
29、根据对象监视技术,从所述第一单元测试用例数据中确定出所述目标对象类型对应方法的入参实例;
30、根据所述目标对象类型对应方法的返回值的实例对象特征,通过java反射技术,从所述第一单元测试用例数据中确定出返回值实例;
31、其中,所述第二单元测试用例数据包括:所述入参实例和所述返回值实例。
32、在一种可能的设计中,在所述根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码之前,所述确定模块,还用于:
33、根据所述目标对象类型对应方法的参数特征中参数对应的参数规则,确定入参比对校验模板;
34、根据所述目标对象类型对应方法的属性特征中的字符串匹配或json格式属性,确定返回值比对校验模板;
35、其中,所述入参和返回值比对校验模板包括:所述入参比对校验模板和所述返回值比对校验模板。
36、在一种可能的设计中,所述第一生成模块,用于:
37、根据所述目标对象类型、所述第二单元测试用例数据、以及所述入参和返回值比对校验模板,确定用于生成虚拟对象和测试用例的基础数据;
38、根据所述用于生成虚拟对象和测试用例的基础数据,确定所述目标对象类型对应的虚拟代码。
39、在一种可能的设计中,所述第二生成模块,用于:
40、根据所述虚拟代码中的配置信息和预期行为,生成所述单元测试代码。
41、在一种可能的设计中,所述确定模块,还用于:
42、获取待测试代码;
43、根据所述单元测试代码,对所述待测试代码进行测试,得到所述待测试代码的测试结果。
44、第三方面,本技术实施例提供一种电子设备,包括:至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的测试代码生成方法。
45、第四方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的测试代码生成方法。
46、第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如上第一方面以及第一方面各种可能的设计所述的测试代码生成方法。
47、本技术提供的测试代码生成方法、装置、设备及存储介质,通过根据aop技术,从实际业务场景获取第一单元测试用例数据,第一单元测试用例数据包括业务场景中各个对象类型的用例数据;根据预定义的目标对象类型,从第一单元测试用例数据中确定出第二单元测试用例数据,目标对象类型为不符合java bean对象的结构要求的java类型;根据目标对象类型、第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成目标对象类型对应的虚拟代码,入参和返回值比对校验模板是基于目标对象类型对应方法的参数特征和属性特征确定的;根据目标对象类型对应的虚拟代码,生成单元测试代码。该技术方案中,基于不符合java bean对象的结构要求的java类型、从实际业务场景中的测试用例出发,结合相应的预设的入参和返回值比对校验模板,更加准确的实现了生成复杂外部对象的单元测试代码。
1.一种测试代码生成方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述根据预定义的目标对象类型,从所述第一单元测试用例数据中确定出第二单元测试用例数据,包括:
3.根据权利要求1所述的方法,其特征在于,在所述根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码之前,所述方法还包括:
4.根据权利要求1-3任一项所述的方法,其特征在于,所述根据所述目标对象类型、所述第二单元测试用例数据、以及预设的入参和返回值比对校验模板,生成所述目标对象类型对应的虚拟代码,包括:
5.根据权利要求1-3任一项所述的方法,其特征在于,所述根据所述目标对象类型对应的虚拟代码,生成单元测试代码,包括:
6.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
7.一种测试代码生成装置,其特征在于,包括:
8.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-6中任一项所述的方法。
10.一种计算机程序产品,其特征在于,包括计算机程序,该计算机程序被处理器执行时实现权利要求1-6中任一项所述的方法。
