测试方法、装置、电子设备、存储介质和程序产品与流程

文档序号:28724953发布日期:2022-01-29 15:38阅读:236来源:国知局
测试方法、装置、电子设备、存储介质和程序产品与流程

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.运行与功能单元子代码对应的第二测试脚本,以第二测试数据为参数调用功能单元子代码进行第二静态类型测试,得到当前第二测试结果。
44.根据本公开实施例的第三方面,提供一种电子设备,包括:
45.处理器;
46.用于存储处理器可执行指令的存储器;
47.其中,处理器被配置为执行指令,以实现如第一方面的测试方法。
48.根据本公开实施例的第四方面,提供一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面的测试方法。
49.根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现第一方面的测试方法。
50.本公开的实施例提供的技术方案至少带来以下有益效果:
51.本公开实施例提供的测试方法、装置、电子设备、存储介质和程序产品,可以利用功能单元子代码可运行的测试数据,对功能单元子代码进行静态类型检测得到第一测试结果,以及利用功能单元子代码不可运行的测试数据,对功能单元子代码进行第二静态类型检测得到第二测试结果,可以实现自动化获取功能单元子代码静态类型的测试结果的具体信息,无需人工确定,提高了确定功能单元子代码静态类型测试结果的具体信息的效率;同时,在确定代码重构前后的功能单元子代码均可以运行其可运行的数据类型,以及代码重构前后的功能单元子代码均无法运行其不可运行的数据类型的测试数据,且代码重构前后的第二测试结果相同时,确定功能单元子代码的静态类型正确,可以通过功能单元子代码对其可以运行的数据和不可运行的数据的两个运行结果,快速的确定功能单元子代码静态类型的正确性,提高了确定功能单元子代码静态类型正确性的效率和准确度。
52.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
53.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
54.图1是根据一示例性实施例示出的一种测试方法的流程图。
55.图2是根据一示例性实施例示出的一种确定当前第一测试结果为与第一测试数据
对应的期望测试结果的方法流程图。
56.图3是根据一示例性实施例示出的一种确定当前第二测试结果为与第二测试数据对应的期望测试结果的方法流程图。
57.图4是根据一示例性实施例示出的另一种测试方法的流程图。
58.图5是根据一示例性实施例示出的一种测试装置的结构示意图。
59.图6是根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
60.为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
61.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
62.相关技术中,在目标代码的测试阶段,如果对目标单元中功能单元子代码进行了重构,需要对重构后的功能单元子代码的静态类型和逻辑性进行检测,以保证代码重构不会破坏功能单元子代码的功能实现。通常情况下,可以利用测试工具对功能单元子代码的静态类型正确性进行测试,但是,相关技术中采用的测试工具在检测功能单元子代码的静态类型时,只能提示功能单元子代码是否存在静态类型错误,无法确定具体的错误信息。例如,对于待测试的目标代码中的功能单元子代码,可以基于jest测试框架对功能单元子代码静态类型的正确性进行检测,其中,目标代码可以是利用typescript编程语言编写的,基于jest测试框架(一种针对javascript编程语言的代码测试框架)检测功能单元子代码的静态类型的正确性的过程可以包括:对于功能单元子代码,添加jsdoc注释(jsdoc是一个根据javascript文件中注释信息,生成javascript应用程序或模块的应用程序接口文档的工具),jsdoc注释可以是“@ts-expect-error”指令,在待测试代码的测试过程中,jsdoc解析器可以识别jsdoc注释,若功能单元子代码的静态类型正确,则可以显示无效指令的提示信息,若功能单元子代码的静态类型不正确,则可以显示静态类型错误的提示信息。
63.可见,相关技术中提供的,对于目标代码中功能单元子代码的静态类型正确性的检测方法,只是简单的提示功能单元子代码是否存在静态类型错误,无法自动确定静态类型测试结果的具体信息,需要测试人员根据提示信息确定功能单元子代码的静态类型测试结果的具体信息,耗费时间和人力。
64.鉴于上述问题,本公开实施例提供了一种测试方法,该测试方法可以应用于任一代码测试设备中,该代码测试设备可以个人电脑或者台式电脑等,本公开实施例对此不作限定。其中,测试方法可以应用于对目标代码中功能单元子代码静态类型正确性的测试环节,被测试的目标代码可以是利用typescript编程语言编写的。针对利用typescript编程语言编写的目标代码,代码测试过程可以基于jest测试框架编写的测试工具和typescript编程语言的检测引擎实现,该测试方法的应用场景包括但不限于:测试工具响应于对待测
试的目标代码的选择操作,加载预先存储的目标代码,以获取待测试的目标代码,并调用typescript编程语言的检测引擎,进行代码测试,该代码测试过程可以在jest测试框架中实现。该测试工具可以是基于jest测试框架编写的tkit/type-test测试工具。
65.图1是根据一示例性实施例示出的一种测试方法的流程图,如图1所示,测试方法包括以下步骤s101至步骤s103:
66.在步骤s101中,获取待测试的目标代码。
67.在本公开实施例中,目标代码中包括功能单元子代码,功能单元子代码是指目标代码中,用于执行某一任务或实现某一功能的代码模块。
68.在步骤s102中,利用第一测试数据对功能单元子代码进行第一静态类型测试得到当前第一测试结果,以及,利用第二测试数据对功能单元子代码进行第二静态类型测试得到当前第二测试结果。
69.在本公开实施例中,第一测试数据的数据类型为功能单元子代码可运行的数据类型,第一静态类型测试指的是使功能单元子代码运行第一测试数据,当前第一测试结果为利用第一测试数据对代码重构后的功能单元子代码进行第一静态类型测试得到的测试结果;第二测试数据的数据类型为功能单元子代码不可运行的数据类型,第二静态类型测试指的是使功能单元子代码运行第二测试数据,当前第二测试结果为利用第二测试数据对代码重构后的功能单元子代码进行第二静态类型测试得到的测试结果。
70.其中,若功能单元子代码可以运行第一测试数据,则第一测试结果中不包括数组,若功能单元子代码无法运行第一测试数据,则第一测试结果中包括至少一个数组;同理,若功能单元子代码可以运行第二测试数据,则第二测试结果中不包括数组,若功能单元子代码无法运行第二测试数据,则第二测试结果中包括至少一个数组,每个数组中的字符串可以包括多个字段标识和与字段标识对应的字段信息,该字段标识可以包括:错误类型标识、错误码标识、目标文件的文件名标识以及错误信息标识,以记录测试结果的具体信息。
71.在步骤s103中,若确定当前第一测试结果为与第一测试数据对应的期望测试结果,且确定当前第二测试结果为与第二测试数据对应的期望测试结果,则确定功能单元子代码的静态类型正确。
72.在本公开实施例中:与第一测试数据对应的期望测试结果是指,对代码重构前后的功能单元子代码分别进行第一静态类型测试,代码重构前后的功能单元子代码均可以运行第一测试数据;与第二测试数据对应的期望测试结果是指,对代码重构前后的功能单元子代码进行第二静态类型测试,代码重构前后的功能单元子代码均无法运行第二测试数据,且对代码重构前后的功能单元子代码进行第二静态类型测试得到的第二测试结果中的数组相同。
73.综上所述,本公开实施例提供的测试方法,针对目标代码中的功能单元子代码,可以利用功能单元子代码可运行的测试数据,对功能单元子代码进行静态类型检测得到第一测试结果,以及利用功能单元子代码不可运行的测试数据,对功能单元子代码进行第二静态类型检测得到第二测试结果,可以实现自动化获取功能单元子代码静态类型的测试结果的具体信息,无需人工确定,提高了确定功能单元子代码静态类型测试结果的具体信息的效率;同时,在确定代码重构前后的功能单元子代码均可以运行其可运行的数据类型,以及代码重构前后的功能单元子代码均无法运行其不可运行的数据类型的测试数据,且代码重
构前后的第二测试结果相同时,确定功能单元子代码的静态类型正确,可以通过功能单元子代码对其可以运行的数据和不可运行的数据的两个运行结果,快速的确定功能单元子代码静态类型的正确性,提高了确定功能单元子代码静态类型正确性的效率和准确度。
74.在一个可选的实施例中,在上述步骤s101中,测试工具可以获取待测试的目标代码。
75.在本公开实施例中,目标代码中包括功能单元子代码,目标代码可以是利用typescript编程语言编写的,示例的,该功能单元子代码可以是目标代码中,与用于执行某一任务的函数对应的代码模块。
76.在一种可选的实施方式中,测试工具获取待测试的目标代码的过程可以包括:测试工具可以响应于对代码测试设备中预先存储的目标代码的加载操作,获取待测试的目标代码。
77.在一个可选的实施例中,在上述步骤s102中,测试工具可以利用第一测试数据对功能单元子代码进行第一静态类型测试得到当前第一测试结果,以及,利用第二测试数据对功能单元子代码进行第二静态类型测试得到当前第二测试结果。
78.在本公开实施例中,第一测试数据的数据类型为功能单元子代码可运行的数据类型,第二测试数据的数据类型为功能单元子代码不可运行的数据类型。示例的,若某一功能单元子代码可运行的数据类型为number类型的数据,则第一测试数据为number类型的测试数据,第二测试数据为非number类型的测试数据,例如,第二测试数据可以包括string类型的测试数据。
79.需要说明的是,在本公开实施例中,对于功能单元子代码,可以预先编写与功能单元子代码对应的第一测试脚本和第二测试脚本,该第一测试脚本用于利用第一测试数据对功能单元子代码进行第一静态类型测试得到第一测试结果;该第二测试脚本用于利用第二测试数据对功能单元子代码进行第二静态类型测试得到第二测试结果,其中,测试结果以数组形式保存,以便于直观的得到针对功能单元子代码的静态类型测试结果的具体信息,可以通过预先编写的与不同功能单元子代码对应的两种测试脚本,进行对应功能单元子代码的静态类型测试,提高测试效率。
80.可以理解的是,在代码编写过程中,需要执行的任务或者实现的功能是多样的,与任务或者功能对应的代码模块也是多样的,对于与每个任务或者功能对应的代码模块,可以预先编写与其对应的第一测试脚本和第二测试脚本,得到测试脚本库,在代码测试过程中,可以在测试脚本库中调用与目标代码中功能单元子代码对应的第一测试脚本和第二测试脚本,对待测试的目标代码中的功能单元子代码进行测试。其中,测试脚本库中的每个第一测试脚本或者第二测试脚本可以包括其可测试功能单元子代码的功能单元标识。
81.在一种可选的实施方式中,测试工具利用第一测试数据对功能单元子代码进行第一静态类型测试得到当前第一测试结果的过程可以包括:运行与功能单元子代码对应的第一测试脚本,以第一测试数据为参数调用功能单元子代码进行第一静态类型测试,得到当前第一测试结果。
82.其中,运行与功能单元子代码对应的第一测试脚本的过程可以包括:确定功能单元子代码的功能单元标识,根据功能单元标识在测试脚本库中确定与功能单元标识对应的第一测试脚本,得到与功能单元子代码对应的第一测试脚本,并运行与功能单元子代码对
应的第一测试脚本。
83.其中,以第一测试数据为参数调用功能单元子代码进行第一静态类型测试,得到当前第一测试结果的过程可以基于第一测试脚本实现,以提高确定第一测试结果的效率,该过程可以包括:运行第一测试脚本,以使第一测试脚本生成第一测试数据,并利用第一测试数据调用功能单元子代码,监控功能单元子代码对第一测试数据的运行结果,根据运行结果生成当前第一测试结果。其中,若监控到功能单元子代码被第一测试数据成功调用,则生成当前第一测试结果,并将当前第一测试结果转换为json(javascript object notation,javascript对象表示法)格式,该当前第一测试结果中不包括数组;若监控功能单元子代码无法被第一测试数据成功调用,则生成当前第一测试结果,并将当前第一测试结果转换为json格式,该当前第一测试结果中包括至少一个数组,每个数组中的字符串可以包括多个字段标识和与字段标识对应的字段信息,该字段标识可以包括:错误类型标识、错误码标识、目标文件的文件名标识以及错误信息标识。
84.需要说明的是,运行代码的过程包括:为代码赋参数值,以使代码根据参数值执行其中的数据处理逻辑,得到代码对参数值的执行结果的过程,测试数据就是在代码测试阶段赋给代码的参数值,利用第一测试数据调用功能单元子代码的过程指的是:将第一测试数据赋值给功能单元子代码,以使功能单元子代码根据第一测试数据执行其中的数据处理逻辑,得到对第一测试数据的执行结果的过程。
85.在一种可选的实施方式中,测试工具利用第二测试数据对功能单元子代码进行第二静态类型测试得到当前第二测试结果的过程可以包括:运行与功能单元子代码对应的第二测试脚本,以第二测试数据为参数调用功能单元子代码进行第二静态类型测试,得到当前第二测试结果。
86.其中,运行与功能单元子代码对应的第二测试脚本的过程可以包括:确定功能单元子代码的功能单元标识,根据功能单元标识,在测试脚本库中确定与功能单元标识对应的第二测试脚本,得到与功能单元子代码对应的第二测试脚本,并运行与功能单元子代码对应的第二测试脚本。
87.其中,以第二测试数据为参数调用功能单元子代码以进行第二静态类型测试,得到当前第二测试结果的过程可以基于第二测试脚本实现,以提高确定第二测试结果的效率,该过程可以包括:运行第二测试脚本,以使第二测试脚本生成第二测试数据,利用第二测试数据调用功能单元子代码,监控功能单元子代码对第二测试数据的运行结果,根据运行结果生成当前第二测试结果。其中,若监控到功能单元子代码被第二测试数据成功调用,则生成当前第二测试结果,并将当前第二测试结果转换为json格式,该当前第二测试结果中不包括数组;若监控功能单元子代码无法被第二测试数据成功调用,则生成当前第二测试结果,并将当前第二测试结果转换为json格式,该当前第二测试结果中包括至少一个数组,每个数组中的字符串可以包括多个字段标识和与字段标识对应的字段信息,该字段标识可以包括:错误类型标识、错误码标识、目标文件的文件名标识以及错误信息标识。
88.同理,利用第二测试数据调用功能单元子代码的过程指的是:将第二测试数据赋值给功能单元子代码,以使功能单元子代码根据第二测试数据执行其中的数据处理逻辑,得到对第二测试数据的执行结果的过程。
89.示例的,假设对某一功能单元子代码进行第二静态类型测试得到当前第二测试结
果为[{"category":1,"code":2322,"filename":"cmsamples/testcmfail.ts","messagetext":"type'number'is not assignable to type'string'.",}],其中,当前第二测试结果包括一个数组{"category":1,"code":2322,"filename":"cmsamples/testcmfail.ts","messagetext":"type'number'is not assignable to type'string'.",},该数组中category表示错误类型标识,1表示错误类型;code表示错误码标识,2322表示错误码;filename表示目标文件的文件名标识,cmsamples/testcmfail.ts表示目标文件的文件名;messagetext表示错误信息标识,type'number'is not assignable to type'string'表示错误信息。则该当前第二测试结果表示,文件名cmsamples/testcmfail.ts的目标代码的功能单元子代码出现一个错误类型为1的ts2322错误,该错误信息为可运行'number'类型数据的功能单元子代码不可以运行'string'类型数据。
[0090]
在一个可选的实施例中,在上述步骤s103中,若测试工具确定当前第一测试结果为与第一测试数据对应的期望测试结果,且确定当前第二测试结果为与第二测试数据对应的期望测试结果,则确定功能单元子代码的静态类型正确。
[0091]
在本公开实施例中,若当前第一测试结果为空数组,表示功能单元子代码可以成功运行其可运行的数据类型的测试数据;且历史第一测试结果为空数组,表示代码重构前的功能单元子代码也可以成功运行其可运行的数据类型的测试数据,可以确定测试工具确定当前第一测试结果为与第一测试数据对应的期望测试结果,其中,当前第一测试结果为,利用第一测试数据对代码重构后的功能单元子代码进行第一静态类型测试得到的测试结果,历史第一测试结果为,利用第一测试数据对代码重构前的功能单元子代码进行第一静态类型测试得到的第一测试结果。
[0092]
若当前第二测试结果为非空数组,表示功能单元子代码无法成功运行其不可运行的数据类型的测试数据;且历史第二测试结果为非空数组,表示代码重构前的功能单元子代码也无法成功运行其不可运行的数据类型的测试数据,则可以确定当前第二测试结果为与第二测试数据对应的期望测试结果,其中,当前第二测试结果为,利用第二测试数据对代码重构后的功能单元子代码进行第二静态类型测试得到的测试结果,历史第二测试结果为,利用第二测试数据对代码重构前的功能单元子代码进行第二静态类型测试得到的第二测试结果。
[0093]
在一种可选的实施方式中,如图2所示,测试工具确定当前第一测试结果为与第一测试数据对应的期望测试结果的过程可以包括以下步骤s201至s203:
[0094]
步骤s201、判断当前第一测试结果是否为空数组。
[0095]
在一种可选的实施方式中,测试工具判断当前第一测试结果是否为空数组的过程可以包括:获取当前第一测试结果,判断当前第一测试结果中是否存在数组,若当前第一测试结果中存在数组,则确定当前第一测试结果为非空数组,表示功能单元子代码无法运行其可运行的数据类型的数据,代码重构破坏了功能单元子代码的静态类型,则可以显示功能单元子代码的静态类型测试失败的提示信息,并结束流程;若当前第一测试结果不存在数组,则确定当前第一测试结果为空数组,表示功能单元子代码无法运行其可运行的数据类型的数据,则继续执行步骤s202。
[0096]
示例的,测试工具判断当前第一测试结果是否为空数组的过程可以通过调用tohavelength(number)匹配器实现,该tohavelength(number)匹配器用于判断测试结果中
数组的数量;其中,若当前第一测试结果为[{

},{

}],由于该当前第一测试结果中包括两个数组{

},则tohavelength(number)匹配器输出的当前第一测试结果为tohavelength(2),表示当前第一测试结果为非空数组;若当前第一测试结果为[],由于该当前第一测试结果中没有数组,则tohavelength(number)匹配器输出的当前第一测试结果为tohavelength(0),表示当前第一测试结果为空数组。
[0097]
步骤s202、若当前第一测试结果为空数组,则获取第一快照数据。
[0098]
在本公开实施例中,快照数据是测试结果的备份数据,该第一快照数据为历史第一测试结果的快照数据,该第一快照数据的生成过程可以包括:在对代码重构前的功能单元子代码进行静态类型测试过程中,利用第一测试数据对代码重构前的功能单元子代码进行第一静态类型测试得到第一测试结果后,可以生成该第一测试结果的快照数据文件,得到第一快照数据。
[0099]
在一种可选的实施方式中,测试工具获取第一快照数据的过程可以包括:在快照数据文件中获取第一快照数据。
[0100]
步骤s203、若第一快照数据为空数组,则确定当前第一测试结果为与第一测试数据对应的期望测试结果。
[0101]
在一种可选的实施方式中,测试工具确定当前第一测试结果是否为与第一测试数据对应的期望测试结果的过程可以包括:测试工具可以将第一快照数据与当前第一测试结果比对,判断第一快照数据是否也为空数组,若第一快照数据是为空数组,表示代码重构前的功能单元子代码可以成功运行其可运行的数据类型的数据,则可以确定当前第一测试结果为与第一测试数据对应的期望测试结果;若第一快照数据是为非空数组,表示功能单元子代码无法运行其可运行的数据类型的数据,代码重构破坏了功能单元子代码的静态类型,则可以确定当前第一测试结果不是与第一测试数据对应的期望测试结果,并可以结束流程。其中,测试工具确定当前第一测试结果是否为与第一测试数据对应的期望测试结果的过程可以通过调用tomatchsnapshot()匹配器实现,tomatchsnapshot()匹配器可以对第一快照数据和当前第一测试结果的数据内容进行比对,若第一快照数据和当前第一测试结果一致,确定当前第一测试结果为与第一测试数据对应的期望测试结果。
[0102]
需要说明的是,在本公开实施例中,在确定当前第一测试结果为非空数组时,就可以结束流程,直接显示功能单元子代码的静态类型测试失败的提示信息,可以减少后续获取第一快照数据,以及判断第一快照数据是否为空数组等过程造成的数据处理资源的浪费,并提升确功能单元子代码的静态类型正确性的效率。
[0103]
在一个可选的实施例中,如图3所示,测试工具确定当前第二测试结果为与第二测试数据对应的期望测试结果的过程可以包括以下步骤s301至s303:
[0104]
步骤s301、判断当前第二测试结果是否为非空数组。
[0105]
在一种可选的实施例中,测试工具判断当前第二测试结果是否为空数组的过程可以包括:获取当前第二测试结果,判断当前第二测试结果中是否存在数组,若当前第二测试结果中不存在数组,则确定当前第二测试结果为空数组,表示功能单元子代码可以运行其不可运行的数据类型的数据,代码重构破坏了功能单元子代码的静态类型,则可以显示功能单元子代码的静态类型测试失败的提示信息,并结束流程;若当前第二测试结果存在数组,则确定当前第二测试结果为非空数组,表示功能单元子代码无法运行其不可运行的数
据类型的数据,则继续执行步骤s202。
[0106]
示例的,测试工具判断当前第二测试结果是否为空数组的过程可以通过调用tohavelength(number)匹配器实现,其中,若当前第二测试结果为[{

}],由于该当前第二测试结果中包括一个数组{

},则tohavelength(number)匹配器输出的当前第二测试结果为tohavelength(1),表示当前第二测试结果为非空数组;若当前第二测试结果为[],由于该当前第二测试结果中没有数组,则tohavelength(number)匹配器输出的当前第二测试结果为tohavelength(0),表示当前第二测试结果为空数组。
[0107]
步骤s302、若当前第二测试结果为非空数组,则获取第二快照数据。
[0108]
在本公开实施例中,第二快照数据为历史第二测试结果的快照数据,该第二快照数据的生成过程可以包括:在对代码重构前的功能单元子代码进行静态类型测试过程中,利用第二测试数据对代码重构前的功能单元子代码进行第二静态类型测试得到第二测试结果后,可以生成第二测试结果的快照数据文件,得到第二快照数据。
[0109]
在一种可选的实施方式中,测试工具获取第二快照数据的过程可以包括:在快照数据文件中获取第二快照数据。
[0110]
步骤s303、若确定第二快照数据与当前第二测试结果相同,则确定当前第二测试结果为与第二测试数据对应的期望测试结果。
[0111]
在一种可选的实施方式中,测试工具确定第二快照数据与当前第二测试结果相同的过程可以包括:若第二快照数据为非空数组,则判断第二快照数据对应的数组与当前第二测试结果对应的数组长度是否相同;若第二快照数据对应的数组与当前第二测试结果对应的数组长度不相同,则确定第二快照数据与当前第二测试结果不相同,确定当前第二测试结果不是为与第二测试数据对应的期望测试结果,结束流程,可以减小数据处理量。
[0112]
若第二快照数据对应的数组与当前第二测试结果对应的数组长度相同,则继续判断第二快照数据对应的数组与当前第二测试结果对应的数组中的字符串是否一致;若第二快照数据对应的数组与当前第二测试结果对应的数组中的字符串一致,则确定第二快照数据与当前第二测试结果相同,可以在确定第二快照数据与当前第二测试结果的具体信息一致时,确定第二快照数据与当前第二测试结果相同,以提提升确定功能单元子代码静态类型正确性的准确度。其中,测试工具判断第二快照数据对应的数组与当前第二测试结果对应的数组中的字符串是否一致的过程可以通过调用tomatchsnapshot()匹配器实现,tomatchsnapshot()匹配器可以对第二快照数据和当前第二测试结果的数据内容进行比对,若第二快照数据和当前第二测试结果一致,确定当前第二测试结果为与第二测试数据对应的期望测试结果。可以理解的是,若第二快照数据为空数组,表示代码重构前的功能单元子代码的静态类型不正确,可以显示相应的提示信息,该提示信息可以是报错提示信息。
[0113]
需要说明的是,在本公开实施例中,在确定当前第二测试结果为空数组时,就可以结束流程,直接确定功能单元子代码的静态类型不正确,可以减少后续获取第二快照数据,以及判断第二快照数据与当前第二测试结果相同是否相同等过程造成的数据处理资源的浪费,并提升确功能单元子代码的静态类型正确性的效率。
[0114]
在一种可选的实施方式中,在本公开实施例中,若测试工具确定功能单元子代码的静态类型不正确,可以显示显示功能单元子代码的静态类型错误提示信息,测试人员可以通过查看当前第一测试结果和当前第二测试结果,确定该当前第一测试结果和当前第二
测试结果是否符合实际预期,若确定该当前第一测试结果和当前第二测试结果不符合实际预期,则可以确定针对功能单元子代码的静态类型检测失败,若确定该当前第一测试结果和当前第二测试结果符合实际预期,则可以更新第一快照数据和第二快照数据,则测试工具可以响应于对第一快照数据的更新操作,利用当前第一测试结果更新第一快照数据;以及响应于对第二快照数据的更新操作,利用当前第二测试结果更新第一快照数据。
[0115]
其中,利用当前第一测试结果更新第一快照数据的过程可以包括:确定第一快照数据的存储位置,将第一快照数据存储位置中的第一快照数据替换为当前第一测试结果;利用当前第二测试结果更新第一快照数据的过程可以包括:确定第二快照数据的存储位置,将第二快照数据存储位置中的第二快照数据替换为当前第二测试结果。
[0116]
在一种可选的实施方式中,测试工具可以接收快照更新指令,响应于快照更新指令将第一快照数据更新为当前第一测试结果,以及将第二快照数据更新为当前第二测试结果。可以理解的是,在对目标代码中功能单元子代码再次进行重构后,可以在下一次的代码测试过程中,利用测试结果和更新后的快照数据判断再次重构后的功能单元子代码的静态类型的正确性。
[0117]
示例的,假设基于jest测试框架编写的测试工具是tkit/type-test,待测试的目标代码是利用typescript编程语言编写的,目标代码的文件名为test.ts,该目标代码test.ts中包含用于执行某一任务或实现某一功能的函数对应的功能单元子代码t1,需要对该功能单元子代码t1进行测试,其中,功能单元子代码t1可运行的数据类型为number类型,该如图4所示,该过程可以包括:
[0118]
步骤s401、测试工具tkit/type-test获取待测试的目标代码test.ts;
[0119]
步骤s402、测试工具tkit/type-test调用typescript检测引擎;
[0120]
步骤s403、测试工具tkit/type-test基于typescript检测引擎,运行与功能单元子代码t1对应的第一测试脚本ok.ts,以第一测试数据“1”为参数调用功能单元子代码t1以进行第一静态类型测试,得到当前第一测试结果a1;以及,运行与功能单元子代码t1对应的第二测试脚本,以第二测试数据“string”为参数调用功能单元子代码t1以进行第二静态类型测试,得到当前第二测试结果a2;
[0121]
步骤s404、测试工具tkit/type-test调用tohavelength(number)匹配器判断当前第一测试结果a1是否为空数组,以及判断当前第二测试结果a2是否为非空数组;
[0122]
步骤s405、若当前第一测试结果a1为空数组,当前第二测试结果a2为非空数组,则测试工具tkit/type-test调用tomatchsnapshot()匹配器确定第一快照数据a1’也是空数组,以及确定第二快照数据a2’也是非空数组,且第二快照数据a2’的非空数组和当前第二测试结果a2的非空数组中字符串一致,则确定功能单元子代码的静态类型正确。
[0123]
步骤s406、若测试工具tkit/type-test确定功能单元子代码的静态类型不正确,可以显示功能单元子代码的静态类型错误提示信息。
[0124]
在本公开实施例中,测试人员可以基于功能单元子代码的静态类型错误提示信息,查看当前第一测试结果和当前第二测试结果,判断当前第一测试结果和当前第二测试结果是否符合实际预期,若符合实际预期,可以在测试工具中输入快照更新指令。
[0125]
步骤s407、测试工具tkit/type-test接收到快照更新指令后,响应于快照更新指令将第一快照数据a1’更新为当前第一测试结果a1,以及将第二快照数据a2’更新为当前第
二测试结果a2。
[0126]
图5是根据一示例性实施例示出的一种测试装置框图。参照图5,该测试装置500包括获取模块501,测试模块502和确定模块503。
[0127]
获取模块501,被配置为获取待测试的目标代码,目标代码中包括功能单元子代码;
[0128]
测试模块502,被配置为利用第一测试数据对功能单元子代码进行第一静态类型测试得到当前第一测试结果,以及,利用第二测试数据对功能单元子代码进行第二静态类型测试得到当前第二测试结果,第一测试数据的数据类型为功能单元子代码可运行的数据类型,第二测试数据的数据类型为功能单元子代码不可运行的数据类型;
[0129]
确定模块503,被配置为若确定当前第一测试结果为与第一测试数据对应的期望测试结果,且确定当前第二测试结果为与第二测试数据对应的期望测试结果,则确定功能单元子代码的静态类型正确。
[0130]
可选的,确定模块503,被配置为:
[0131]
若当前第一测试结果为空数组,则获取第一快照数据,第一快照数据为历史第一测试结果的快照数据;
[0132]
若第一快照数据为空数组,则确定当前第一测试结果为与第一测试数据对应的期望测试结果。
[0133]
可选的,如图5所示,测试装置500还包括:
[0134]
更新模块504,被配置为响应于对第一快照数据的更新操作,利用当前第一测试结果更新第一快照数据。
[0135]
可选的,确定模块503,被配置为:
[0136]
若当前第二测试结果为非空数组,则获取第二快照数据,第二快照数据为历史第二测试结果的快照数据;
[0137]
若确定第二快照数据与当前第二测试结果相同,则确定当前第二测试结果为与第二测试数据对应的期望测试结果。
[0138]
可选的,确定模块503,确定第二快照数据与当前第二测试结果相同,包括:第二快照数据为非空数组、第二快照数据对应的数组与当前第二测试结果对应的数组长度相同,且第二快照数据对应的数组与当前第二测试结果对应的数组中的字符串一致。
[0139]
可选的,更新模块504,被配置为响应于对第二快照数据的更新操作,利用当前第二测试结果更新第一快照数据。
[0140]
可选的,测试模块502,被配置为:
[0141]
运行与功能单元子代码对应的第一测试脚本,以第一测试数据为参数调用功能单元子代码进行第一静态类型测试,得到当前第一测试结果。
[0142]
可选的,测试模块502,被配置为:
[0143]
运行与功能单元子代码对应的第二测试脚本,以第二测试数据为参数调用功能单元子代码进行第二静态类型测试,得到当前第二测试结果。
[0144]
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0145]
本公开的示例性实施方式还提供了一种电子设备,可以是代码测试设备。下面参
考图6对该电子设备进行说明。应当理解,下面参考图6对该电子设备进行说明。应当理解,图6显示的电子设备600仅仅是一个示例,不应对本公开实施方式的功能和使用范围带来任何限制。
[0146]
如图6所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同系统组件(包括存储单元620和处理单元610)的总线630。
[0147]
其中,存储单元存储有程序代码,程序代码可以被处理单元610执行,使得处理单元610执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,处理单元610可以执行如图2所示的方法步骤等。
[0148]
存储单元620可以包括易失性存储单元,例如随机存取存储单元(ram)621和/或高速缓存存储单元622,还可以进一步包括只读存储单元(rom)623。
[0149]
存储单元620还可以包括具有一组(至少一个)程序模块625的程序/实用工具624,这样的程序模块625包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
[0150]
总线630可以包括数据总线、地址总线和控制总线。
[0151]
电子设备600也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,这种通信可以通过输入/输出(i/o)接口640进行。电子设备600还可以通过网络适配器650与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器650通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
[0152]
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0153]
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施方式。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施方式仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
[0154]
另外,本公开还提供一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如上述实施例所提供的测试方法。
[0155]
另外,本公开还提供一种计算机程序产品,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行如上述实施例所提供的测试方法
[0156]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其
它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
[0157]
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1