1.本技术涉及大数据领域,尤其涉及一种单元测试代码生成方法、装置、设备及存储介质。
背景技术:
2.单元测试是一种软件测试方法,能帮助开发人员尽早地发现软件漏洞(bug),是保证软件质量的一个重要环节。目前交易银行系统采用分层架构,其中数据访问层体量较大,涉及几百张甚至更多张数据表的增删改查操作,且由于业务原因,众多数据表含有近百或更多个字段。若以手工编码方式来实现数据访问层的单元测试,开发周期长,开发过程繁琐且重复。
3.相关技术中,自动生成单元测试代码的工具能够生成简单的单元测试代码,但面对交易银行系统中的数据访问层,开发人员还需对单元测试代码进行进一步的修改,导致单元测试代码的开发效率较低,单元测试效果较差。
技术实现要素:
4.本技术提供一种单元测试代码生成方法、装置、设备及存储介质,用以提升单元测试代码的开发效率,提供可信的单元测试。
5.第一方面,本技术提供一种单元测试代码生成方法,包括:
6.获取面向目标单元测试对象的单元测试代码生成请求,单元测试代码生成请求中携带有目标单元测试对象的对象标识、入参信息和出参信息,入参信息包含目标入参和目标入参对应的测试数据,出参信息包含目标出参和目标出参对应的测试数据,目标单元测试对象包括待测试源代码中的类和/或方法,待测试源代码涉及数据库操作;
7.基于出入参与数据库中字段的映射关系,获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息;
8.将目标字段和数据结构信息注入至单元测试模板中,生成结构化查询语言(structured query language,简称sql)映射文件,sql映射文件包含数据库操作语句,并将入参信息和出参信息写入json文本中,json文本用于存储和表示数据;
9.按照java编码规范对json文本及单元测试模板进行编码,生成目标单元测试对象的单元测试工程,单元测试工程包含单元测试代码和xml文件,xml文件包含sql映射文件中的信息和相关组件的配置注入信息。
10.在一种可能的实施方式中,上述获取面向目标单元测试对象的单元测试代码生成请求,包括:
11.接收作用于单元测试代码生成界面上第一控件的第一交互操作,第一控件用于触发单元测试代码的生成;
12.响应第一交互操作,获取面向目标单元测试对象的单元测试代码生成请求。
13.在一种可能的实施方式中,上述单元测试代码生成界面中还展示可供选择的入参
和可供选择的出参,其中,单元测试代码生成界面还包含第一区域和第二区域,可供选择的入参在第一区域显示,可供选择的出参在第二区域显示,在接收第一交互操作之前还包括:
14.响应于针对可供选择的入参的第一选择操作,确定目标入参为第一选择操作对应的入参,并在第一区域区别显示目标入参;
15.响应于针对可供选择的出参的第二选择操作,确定目标出参为第二选择操作对应的出参,并在第二区域区别显示目标出参。
16.在一种可能的实施方式中,上述第一区域还显示可供选择的入参对应的第一测试数据,第二区域还显示可供选择的出参对应的第二测试数据,第一测试数据和第二测试数据均可编辑。
17.在一种可能的实施方式中,单元测试代码生成方法还包括:
18.响应针对第一测试数据的第一编辑操作,确定目标入参对应的测试数据包含第一编辑操作编辑的测试数据,第一编辑操作用于调整第一测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项;
19.和/或,响应针对第二测试数据的第二编辑操作,确定目标出参对应的测试数据包含第二编辑操作编辑的测试数据,第二编辑操作用于调整第二测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项。
20.在一种可能的实施方式中,上述可供选择的入参的命名,和,可供选择的出参的命名,均遵循数据字典;且,第一测试数据和第二测试数据均是基于数据字典为不同类型的参数生成的测试数据。
21.在一种可能的实施方式中,上述单元测试代码生成界面中还展示候选单元测试对象,其中,单元测试代码生成界面还包含第三区域,候选单元测试对象在第三区域显示,在确定目标入参和目标出参之前,还包括:
22.响应针对候选单元测试对象的第三选择操作,确定目标单元测试对象为第三选择操作选择的单元测试对象,并在第三区域区别显示目标单元测试对象。
23.在一种可能的实施方式中,单元测试代码生成方法还包括:
24.候选单元测试对象是响应获取到待测试源代码,识别得到的待测试源代码中包含的单元测试对象;
25.和/或,候选单元测试对象显示在单元测试代码生成界面中,或者,候选单元测试对象包含在清单文件中。
26.在一种可能的实施方式中,上述单元测试代码生成界面中还包括第二控件,第二控件用于获取待测试源代码。
27.第二方面,本技术提供一种单元测试代码生成装置,包括:
28.获取模块,用于获取面向目标单元测试对象的单元测试代码生成请求,单元测试代码生成请求中携带有目标单元测试对象的对象标识、入参信息和出参信息,入参信息包含目标入参和目标入参对应的测试数据,出参信息包含目标出参和目标出参对应的测试数据,目标单元测试对象包括待测试源代码中的类和/或方法,待测试源代码涉及数据库操作;
29.基于出入参与数据库中字段的映射关系,获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息;
30.处理模块,用于将目标字段和数据结构信息注入至单元测试模板中,生成sql映射文件,sql映射文件包含数据库操作语句,并将入参信息和出参信息写入json文本中,json文本用于存储和交换数据;
31.编码模块,用于按照java编码规范对json文本及单元测试模板进行编码,生成目标单元测试对象的单元测试工程,单元测试工程包含单元测试代码和xml文件,xml文件包含sql映射文件中的信息和相关组件的配置注入信息。
32.在一种可能的实施方式中,获取模块可以具体用于:接收作用于单元测试代码生成界面上第一控件的第一交互操作,第一控件用于触发单元测试代码的生成;响应第一交互操作,获取面向目标单元测试对象的单元测试代码生成请求。
33.在一种可能的实施方式中,上述单元测试代码生成界面中还展示可供选择的入参和可供选择的出参,其中,单元测试代码生成界面还包含第一区域和第二区域,可供选择的入参在第一区域显示,可供选择的出参在第二区域显示。获取模块还用于:响应于针对可供选择的入参的第一选择操作,确定目标入参为第一选择操作对应的入参,并在第一区域区别显示目标入参;响应于针对可供选择的出参的第二选择操作,确定目标出参为第二选择操作对应的出参,并在第二区域区别显示目标出参。
34.在一种可能的实施方式中,上述第一区域还显示可供选择的入参对应的第一测试数据,第二区域还显示可供选择的出参对应的第二测试数据,第一测试数据和第二测试数据均可编辑。
35.在一种可能的实施方式中,获取模块还可以用于:响应针对第一测试数据的第一编辑操作,确定目标入参对应的测试数据包含第一编辑操作编辑的测试数据,第一编辑操作用于调整第一测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项;和/或,响应针对第二测试数据的第二编辑操作,确定目标出参对应的测试数据包含第二编辑操作编辑的测试数据,第二编辑操作用于调整第二测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项。
36.在一种可能的实施方式中,上述可供选择的入参的命名,和,可供选择的出参的命名,均遵循数据字典;且,第一测试数据和第二测试数据均是基于数据字典为不同类型的参数生成的测试数据。
37.在一种可能的实施方式中,上述单元测试代码生成界面中还展示候选单元测试对象,其中,单元测试代码生成界面还包含第三区域,候选单元测试对象在第三区域显示。对应地,获取模块还可以用于:在确定目标入参和目标出参之前,响应针对候选单元测试对象的第三选择操作,确定目标单元测试对象为第三选择操作选择的单元测试对象,并在第三区域区别显示目标单元测试对象。
38.在一种可能的实施方式中,候选单元测试对象是响应获取到待测试源代码,识别得到的待测试源代码中包含的单元测试对象。
39.在一种可能的实施方式中,候选单元测试对象显示在单元测试代码生成界面中,或者,候选单元测试对象包含在清单文件中。
40.在一种可能的实施方式中,上述单元测试代码生成界面中还包括第二控件,第二控件用于获取待测试源代码。
41.第三方面,本技术提供一种电子设备,包括:处理器,以及与处理器通信连接的存
储器;
42.存储器存储计算机执行指令;
43.处理器执行存储器存储的计算机执行指令,使得处理器执行第一方面任一项所述的单元测试代码生成方法。
44.第四方面,本技术提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如第一方面任一项所述的单元测试代码生成方法。
45.第五方面,本技术提供一种计算机程序产品,包括计算机程序,该计算机程序被执行时实现如第一方面任一项所述的单元测试代码生成方法。
46.本技术提供的一种单元测试代码生成方法、装置、设备及存储介质,获取面向目标单元测试对象的单元测试代码生成请求,基于出入参与数据库中字段的映射关系,通过连接数据库来获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息,便于对数据库进行相关的测试操作。另外,通过将目标字段和数据结构信息注入至单元测试模板中,可自动生成sql映射文件,sql映射文件包含数据库操作语句,并将入参信息和出参信息写入json文本中。最后,通过按照java编码规范对json文本及单元测试模板进行编码,生成目标单元测试对象的单元测试工程,无需进行额外的手工编码,提升了单元测试代码开发效率、单元测试效果较好。
附图说明
47.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
48.图1为本技术一实施例提供的单元测试代码生成方法的应用场景图;
49.图2为本技术一实施例提供的单元测试代码生成方法的流程示意图;
50.图3为本技术另一实施例提供的单元测试代码生成方法的流程示意图;
51.图4为本技术一实施例提供的单元测试代码生成装置的结构示意图;
52.图5为本技术一实施例提供的电子设备的结构示意图。
53.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
54.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
55.需要说明的是,本技术单元测试代码生成方法、装置、设备及存储介质,可用于大数据领域,也可用于除大数据领域之外的任意领域,本技术单元测试代码生成方法、装置、设备及存储介质的应用领域不做限定。
56.对本技术所涉及的名词进行解释:
57.交易银行:中国银行面向全球领先的在线交易网上银行。
58.数据访问层:负责与数据库的交互,运行数据库查询并执行更新。简单的说法就是实现对数据表的查询,插入,更新,删除等操作。
59.目前的自动生成单元测试代码的工具能生成基本的测试框架,但交易银行系统中数据访问层涉及数据库操作,而目前的工具无法自动生成增删改查数据库数据的操作,只是基于被测试的类及方法进行单元测试。另外,数据访问层单元测试的痛点还包括测试数据的准备、参数化测试数据以及待测试函数调用结果的验证。尤其是面对交易银行系统中,拥有近百个甚至更多字段的复杂数据表时,高效准确地准备数据和验证测试结果更加困难,相关技术不能很好的解决这些问题。
60.针对上述技术问题,本技术提供一种单元测试代码生成方法、装置、设备及存储介质,在生成的单元测试代码中,包含针对涉及的数据库操作的相关测试代码,因此适用于涉及数据库操作的对象的单元测试,且无需进行额外的手工编码,提升了单元测试代码开发效率以及单元测试效果。
61.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
62.图1为本技术一实施例提供的单元测试代码生成方法的应用场景图。请参见图1,相关人员作用于终端设备11,通过终端设备11触发单元测试代码的自动生成。响应相关人员的交互操作,终端设备11向服务器12发送面向目标单元测试对象的单元测试代码生成请求。服务器12响应接收到该请求,从终端设备13获取待测试源代码,并基于出入参与数据库中字段的映射关系,获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息,将目标字段和数据结构信息注入至单元测试模板中,并将入参信息和出参信息写入json文本中,按照java编码规范对json文本及单元测试模板进行编码,将生成的目标单元测试对象的单元测试工程返回给终端设备11。
63.需说明的是,图1所示的应用场景仅为示例说明。其中,终端设备11、服务器12、终端设备13中的任意两种或者三种可为同一设备,且对各种设备的个数不进行限制。终端设备11和终端设备13可以为可穿戴设备、手机、电脑、笔记本或个人数字助理(personal digital assistant,简称pda)等;服务器12也可以替换为服务器集群。
64.图2为本技术一实施例提供的单元测试代码生成方法的流程示意图。请参见图2,该单元测试代码生成方法,包括:
65.s201、获取面向目标单元测试对象的单元测试代码生成请求,单元测试代码生成请求中携带有目标单元测试对象的对象标识、入参信息和出参信息,入参信息包含目标入参和目标入参对应的测试数据,出参信息包含目标出参和目标出参对应的测试数据,目标单元测试对象包括待测试源代码中的类和/或方法,待测试源代码涉及数据库操作。
66.其中,单元测试是指对软件中的最小可测试单元进行检查和验证,单元就是人为规定的最小的被测功能模块,例如,java里单元指一个类,c语言中单元指一个函数。
67.类用于描述一类对象的行为和状态,是具有相同特性和行为的对象的抽象。方法可以是一段完成特定功能的代码片段,类似于函数。
68.入参指类和/或方法的输入参数,出参指类和/或方法的输出参数,其参数命名全
局唯一。
69.数据库用于组织、存储和管理各种业务数据、用户数据等,对数据库常见的操作包括数据表或数据项或字段的增、删、改和查等;对应地,测试源代码中的类和/或方法主要包含对数据库的增、删、改和查等。
70.对象标识是与对象相关联的用来无歧义地标识对象的全局唯一的值,可保证对象在通信与信息处理中正确地定位和管理。通俗地讲,对象标识就是网络通信中对象的身份证。
71.s202、基于出入参与数据库中字段的映射关系,获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息。
72.数据库含有各种成分,包括数据表、视图、字段、索引等;表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的;字段也称域,表中的每一列称为一个字段,每个字段都有相应的描述信息,如数据类型、数据宽度等;视图是从一个或几个基本表(或视图)中导出的虚拟的表,是查看表中数据的另外一种方式。
73.通常,java代码中类和/或方法的出入参与数据库表中字段是一一对应的,有相应的映射关系,通过出入参即可定位到数据库中的某张数据表中的某些个字段。
74.该步骤中,可借助使用第三方插件或者软件工具连接数据库,从而进入数据库获取相关的数据信息。可选地,也可通过配置windows系统环境,使用磁盘操作系统(disk operating system,简称dos)命令连接数据库,进行数据库相关操作
75.s203、将目标字段和数据结构信息注入至单元测试模板中,生成sql映射文件,sql映射文件包含数据库操作语句,并将入参信息和出参信息写入json文本中,json文本用于存储和表示数据。
76.该步骤中,单元测试模板是预先准备好的,可使用开源的预置模板,可以理解,该模板构建了单元测试代码的结构。本技术实施例,是对数据访问层进行单元测试代码生成,数据访问层的业务通常涉及数据库的增、删、改和查等操作,单元测试模板相对简单。
77.将目标字段和数据结构信息注入至单元模板测试模板中,可以理解为根据目标字段和数据结构信息对单元测试模板进行参数填充和模板渲染。
78.json文本是一种用于存储简单的数据结构和对象的文件,json是一种轻量级的数据交换格式,基于欧洲计算机协会制定的js规范(european computer manufacturers association,简称ecmascript)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,用于许多web应用程序来进行数据交换。
79.示例地,可通过加载第三方jar包,直接调用里面的方法,对入参信息和出参信息进行处理,将其写入json文本,其中第三方jar包是指由第三方编写的java工具类,包含很多已经写好的方法。
80.s204、按照java编码规范对json文本及单元测试模板进行编码,生成目标单元测试对象的单元测试工程,单元测试工程包含单元测试代码和xml文件,xml文件包含sql映射文件中的信息和相关组件的配置注入信息。
81.该步骤中,按照java编码规范对json文本及单元测试模板进行编码由代码块来执行实现,具体地,读取json文本中的出入参及出入参对应的测试数据,写入单元测试模板中相应的位置,读和写的过程完全按照java编码规范来实现。
82.其中,单元测试工程可以实现将单元测试代码(也称自动化脚本),运行起来,实现自动化测试。单元测试工程包括单元测试代码以及辅助工程运行的xml文件,例如,xml文件中包含sql映射信息、bean的配置注入等信息,bean用于封装数据和业务逻辑,可以理解为一个可重用的组件。
83.本技术实施例,获取面向目标单元测试对象的单元测试代码生成请求,基于出入参与数据库中字段的映射关系,通过连接数据库来获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息,便于对数据库进行相关的测试操作,降低验证单元测试结果的难度。另外,通过将目标字段和数据结构信息注入至单元测试模板中,可自动生成包含数据库操作语句的sql映射文件。最后,通过对json文本及单元测试模板进行编码,自动生成目标单元测试对象的单元测试工程,无需进行额外的手工编码,提升了单元测试代码开发效率、单元测试效果较好。
84.另外,考虑到目前自动生成单元测试代码的工具,需要开发人员掌握一定的技能后才能使用,具有一定的局限性。因此,接下来以一种可视化的方式,为用户自动生成单元测试代码,解放开发人员,提升开发效率,并提供可信的单元测试。
85.在上述实施例的基础上,一种可能的实现方式中,上述获取面向目标单元测试对象的单元测试代码生成请求,可以包括:
86.步骤1、接收作用于单元测试代码生成界面上第一控件的第一交互操作,第一控件用于触发单元测试代码的生成。
87.该步骤中,单元测试代码生成界面可以通过网页版的工具界面呈现,例如,使用浏览器/服务器架构(browser/server,简称b/s架构)方式实现单元测试代码生成工具,可以在浏览器上以网址的形式进行访问工具。
88.可选地,也可以客户端工具的方式呈现,例如,使用客户端/服务器架构(client/server,简称c/s架构),需要在客户端,安装单元测试代码生成工具。
89.第一控件可理解为单元测试代码生成界面上的一个按钮,点击第一控件对应的按钮,即可触发单元测试代码的生成,生成面向目标单元测试对象的单元测试代码生成请求。
90.需要说明的是,本技术实施例不对单元测试代码生成工具的形式进行限制,实际应用中,不限于上述列举的两种形式。另外,单元测试代码生成界面上的每个按钮,对应不同的业务逻辑,点击按钮,即可触发后台业务流程的运行。
91.步骤2、响应第一交互操作,获取面向目标单元测试对象的单元测试代码生成请求。
92.该实施例,在一种可视化工具界面上,通过点击界面上相应按钮/控件实现自动化生成单元测试代码,简化单元测试代码生成流程,操作简单易用。
93.在一些实施例中,上述单元测试代码生成界面中还展示可供选择的入参和可供选择的出参,其中,单元测试代码生成界面还包含第一区域和第二区域,可供选择的入参在第一区域显示,可供选择的出参在第二区域显示,在接收第一交互操作之前还可以包括:
94.步骤2-1、响应于针对可供选择的入参的第一选择操作,确定目标入参为第一选择操作对应的入参,并在第一区域区别显示目标入参;
95.其中,单元测试代码生成界面上展示的第一区域包含多个待选择的入参,即多个可供选择的入参,示例的,在每个入参的前面可以加勾选框供用户勾选,所有的勾选框及入
参按行或列规则地排布在第一区域。
96.用户根据实际测试需求可任意勾选入参对应的勾选框,勾选框被选定,则说明其对应的入参被选定为目标入参。
97.可选地,勾选框被选定后,对应的入参颜色可显示为不同与界面其他颜色,例如,勾选框被选定后,对应的入参变成高亮蓝色。
98.步骤2-2、响应于针对可供选择的出参的第二选择操作,确定目标出参为第二选择操作对应的出参,并在第二区域区别显示目标出参。
99.其中,单元测试代码生成界面上展示的第二区域包含多个待选择的出参,即多个可供选择的出参,示例的,在每个出参的前面可以加勾选框供用户勾选,所有的勾选框及出参按行或列规则地排布在第二区域。
100.用户根据实际测试需求可任意勾选出参对应的勾选框,勾选框被选定,则说明其对应的出参被选定为目标出参。
101.可选地,勾选框被选定后,对应的出参颜色可显示为不同与界面其他颜色,例如,勾选框被选定后,对应的出参变成高亮绿色。
102.在一些实施例中,上述第一区域还可以显示可供选择的入参对应的第一测试数据,第二区域还可以显示可供选择的出参对应的第二测试数据,第一测试数据和第二测试数据均可编辑。
103.在一种可能的实施方式中,单元测试代码生成方法还可以包括以下至少一种实现方式:
104.第一种实现方式、响应针对第一测试数据的第一编辑操作,确定目标入参对应的测试数据包含第一编辑操作编辑的测试数据,第一编辑操作用于调整第一测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项;
105.第二种实现方式、响应针对第二测试数据的第二编辑操作,确定目标出参对应的测试数据包含第二编辑操作编辑的测试数据,第二编辑操作用于调整第二测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项。
106.需要说明的是,第一编辑操作和第二编辑操作不是单元测试代码生成过程中必要的操作,若,通过单元测试代码生成方法中自动生成的第一测试数据或第二测试数据已经满足用户当前的测试需求,则不进行第一编辑操作或第二编辑操作;若,不满足,则需要针对单元测试代码生成方法中自动生成的第一测试数据或第二测试数据进行第一编辑操作或第二编辑操作。
107.该实施例中,单元测试代码生成方法在测试数据准备方面具备用户定制的功能,使得测试数据更加合理、准确,满足客户的测试需求,单元测试效果好。
108.进一步地,上述可供选择的入参的命名,和,可供选择的出参的命名,二者均遵循数据字典;且,第一测试数据和第二测试数据均是基于数据字典为不同类型的参数生成的测试数据。也就是说,开发人员在开发交易银行系统时,数据访问层源代码中涉及的出入参的命名遵循现有的数据字典,以便于统一维护管理以及系统中其他代码模块的调用。
109.对应地,在开发单元测试生成代码的界面时,开发人员预先准备好测试数据模块,该模块可以为目标单元测试对象包括待测试源代码中的类和/或方法提供出入参对应的测试数据;并且,该模块复用现有的数据字典,确保数据访问层源代码中涉及的出入参的命名
与测试数据模块中的参数命名统一。
110.第一测试数据、第二测试数据生成时,基于该测试数据模块,可以对数据进行参数化,将数据包装成待测试源代码中的类和/或方法需要的数据结构或类型,并且,可以根据数据类型及长度进行随机生成第一测试数据、第二测试数据。
111.该实施例,通过预先准备好的测试数据模块,为测试源代码中的类和/或方法提供出入参对应的测试数据,达到高效准确地准备测试数据的效果,解决了现有技术中数据访问层单元测试的痛点。
112.一些实施例中,上述单元测试代码生成界面中还可以展示候选单元测试对象,其中,单元测试代码生成界面还包含第三区域,候选单元测试对象在第三区域显示。该情况下,在确定目标入参和目标出参之前,单元测试代码生成方法还可以包括:响应针对候选单元测试对象的第三选择操作,确定目标单元测试对象为第三选择操作选择的单元测试对象,并在第三区域区别显示目标单元测试对象。
113.其中,单元测试代码生成界面上展示的第三区域包含多个候选单元测试对象,即多个可供选择的待测试源代码中的类和/或方法,示例的,在每个待测试的类和/或方法的前面可以加勾选框供用户勾选,所有的勾选框及待测试的类和/或方法按行或列规则地排布在第三区域。
114.用户根据实际测试需求可任意勾选待测试的类和/或方法对应的勾选框,勾选框被选定,则说明其对应的待测试的类和/或方法被选定为目标待测试的类和/或方法,即目标单元测试对象。
115.可选地,勾选框被选定后,对应的目标单元测试对象颜色可显示为不同与界面其他颜色,例如,勾选框被选定后,对应的目标单元测试对象变成高亮紫色。
116.进一步地,单元测试代码生成方法还可以包括以下至少一种实现方式:
117.第一种实现方式、候选单元测试对象是响应获取到待测试源代码,识别得到的待测试源代码中包含的单元测试对象。
118.本实施例中,候选单元测试对象是在获取到待测试源代码后,可以按照java代码的规则预设类和/或方法的特征信息进行类和/或方法的识别,即识别出待测试源代码中包含的单元测试对象。
119.可选地,也可以调用现成的class类的getname()方法,该方法返回一个字符串,表示类的名称。或者,调用class类的getmethods()方法获取类的所有公共方法,该方法返回一个method数组,表示类的所有公共方法。
120.在一种可能的实施方式中,获取待测试源代码可以通过以下方式实现:单元测试代码生成界面中还包括第二控件,第二控件用于获取待测试源代码。
121.其中,第二控件可理解为单元测试代码生成界面上的一个按钮,点击第二控件对应的按钮,即可触发获取待测试源代码。
122.具体地,点击第二控件对应的按钮后,单元测试代码生成界面上提示用户上传待测试源代码,用户可提前上传待测试源代码至第三方开源代码托管平台,例如git、华为云devcloud等,本技术中对使用的第三方开源代码托管平台不作限制。在单元测试代码生成界面中集成第三方开源代码托管平台,在界面通过配置第三方开源代码托管平台地址,即可实现获取待测试源代码。
123.可选地,点击第二控件对应的按钮后,单元测试代码生成界面上提示用户上传待测试源代码,通过选择本地上传的方式进行待测试源代码的上传,例如,点击单元测试代码生成界面上的本地上传按钮,选择待测试源代码在本地的保存路径,点击确定后完成本地上传。
124.第二种实现方式、候选单元测试对象显示在单元测试代码生成界面中,或者,候选单元测试对象包含在清单文件中。
125.示例地,候选单元测试对象是响应获取到待测试源代码,识别得到待测试源代码中包含的单元测试对象,可以将识别的结果(即候选单元测试对象)直接显示单元测试代码生成界面,用户再根据实际测试需求在该界面上勾选候选单元测试对象;或者,可以将识别的结果(即候选单元测试对象)以清单文件的形式生成,用户打开该清单文件,进行勾选候选单元测试对象,勾选完成后将修改后的清单文件再次上传至单元测试代码生成界面。
126.本技术实施例,以可视化的界面实现单元测试代码生成方法,操作简单,提升开发效率。
127.接下来,结合图3从应用的角度对单元测试代码生成方法进一步地说明,参考图3所示的流程图。
128.s301、用户上传数据访问层的源代码。
129.用户通过上述实施例中的方式上传数据访问层的源代码至单元测试代码生成界面,接着,单元测试代码生成工具中的源代码分析模块,对上传的源代码进行分析,获取待测试源码包中的java类和/或方法,获取待测试源码包中类和/或方法的入参、入参与数据库字段的映射关系、出参、出参与数据库字段的映射关系等。
130.s302、用户选择需要生成单元测试的类和/或方法。
131.用户根据实际的测试需求可以对s301中获取的待测试源码包中的java类和/或方法进行选择,勾选出目标单元测试对象。
132.s303、调用测试数据模块,获取测试数据,并参数化。
133.测试数据模块为待测试的类和/或方法提供出入参对应的测试数据。开发人员在开发交易银行系统的过程中,参数命名应遵循现有的数据字典,该模块复用该数据字典,并为不同类型的数据,提供不同的策略生成测试数据,该测试数据是经过参数化后生成。
134.s304、单元测试代码生成界面展示待测试的类和/或方法,入参数据和信息及出参数据和信息,并支持用户定制。
135.如上述实施例中的方法所述,单元测试代码生成界面可以展示候选单元测试对象、目标单元测试对象、可供选择的入参及其对应的测试数据和可供选择的出参及其对应的测试数据,其中,测试数据中包含的字段与数据库字段对应。
136.用户可以对出入参进行选择、对出入参对应的测试数据进行调整,包括字段名称、数据大小、数据长度和数据类型中的至少一项。
137.s305、用户定制完成后,生成单元测试代码。
138.用户定制完成后,例如可以点击单元测试代码生成按钮,触发单元测试代码自动生成模块的运行。
139.首先,调用数据库模块,数据库模块用于抓取数据库中表、字段、视图等详细信息,生成相应的增删改查代码。连接数据库,根据s304的用户配置从数据库获取目标单元测试
对象的入参及出参对应的数据库表/视图中的字段的详细信息(目标字段和数据结构信息),及数据库表/视图的增删改查方法。
140.其次,调用测试数据模块,基于s304的用户配置,在测试数据模块中根据用户配置中的出入参名为目标单元测试对象包括待测试源代码中的类和/或方法提供出入参对应的测试数据,并对测试数据进行参数化。
141.再次,将目标字段和数据结构信息注入至预先准备好的单元测试模板中,生成sql映射文件,sql映射文件包含数据库操作语句,并将入参信息和出参信息写入json文本中,json文本用于存储和表示数据。
142.最后,按照java编码规范对json文本及单元测试模板进行编码,生成目标单元测试对象的单元测试工程,单元测试工程包含单元测试代码和xml文件,xml文件包含sql映射文件中的信息和相关组件的配置注入信息。
143.下述为本技术装置实施例,可以用于执行本技术方法实施例。对于本技术装置实施例中未披露的细节,请参照本技术方法实施例。
144.图4为本技术一实施例提供的单元测试代码生成装置的结构示意图。如图4所示,该单元测试代码生成装置400包括:获取模块401、处理模块402和编码模块403。其中:
145.获取模块401,用于获取面向目标单元测试对象的单元测试代码生成请求,单元测试代码生成请求中携带有目标单元测试对象的对象标识、入参信息和出参信息,入参信息包含目标入参和目标入参对应的测试数据,出参信息包含目标出参和目标出参对应的测试数据,目标单元测试对象包括待测试源代码中的类和/或方法,待测试源代码涉及数据库操作;基于出入参与数据库中字段的映射关系,获取数据库中与入参信息和出参信息相关的数据表中的目标字段和目标字段对应的数据的数据结构信息;
146.处理模块402,用于将目标字段和数据结构信息注入至单元测试模板中,生成sql映射文件,sql映射文件包含数据库操作语句,并将入参信息和出参信息写入json文本中,json文本用于存储和交换数据;
147.编码模块403,用于按照java编码规范对json文本及单元测试模板进行编码,生成目标单元测试对象的单元测试工程,单元测试工程包含单元测试代码和xml文件,xml文件包含sql映射文件中的信息和相关组件的配置注入信息。
148.可选地,获取模块401可以具体用于:接收作用于单元测试代码生成界面上第一控件的第一交互操作,第一控件用于触发单元测试代码的生成;响应第一交互操作,获取面向目标单元测试对象的单元测试代码生成请求。
149.可选地,单元测试代码生成界面中还展示可供选择的入参和可供选择的出参,其中,单元测试代码生成界面还包含第一区域和第二区域,可供选择的入参在第一区域显示,可供选择的出参在第二区域显示。获取模块401还可以用于:在接收第一交互操作之前,响应于针对可供选择的入参的第一选择操作,确定目标入参为第一选择操作对应的入参,并在第一区域区别显示目标入参;响应于针对可供选择的出参的第二选择操作,确定目标出参为第二选择操作对应的出参,并在第二区域区别显示目标出参。
150.可选地,第一区域还显示可供选择的入参对应的第一测试数据,第二区域还显示可供选择的出参对应的第二测试数据,第一测试数据和第二测试数据均可编辑。
151.可选地,获取模块401还可以用于:响应针对第一测试数据的第一编辑操作,确定
目标入参对应的测试数据包含第一编辑操作编辑的测试数据,第一编辑操作用于调整第一测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项。
152.可选地,获取模块401还可以用于:响应针对第二测试数据的第二编辑操作,确定目标出参对应的测试数据包含第二编辑操作编辑的测试数据,第二编辑操作用于调整第二测试数据的字段名称、数据大小、数据长度和数据类型中的至少一项。
153.可选地,可供选择的入参的命名,和,可供选择的出参的命名,均遵循数据字典;且,第一测试数据和第二测试数据均是基于数据字典为不同类型的参数生成的测试数据。
154.可选地,单元测试代码生成界面中还展示候选单元测试对象,其中,单元测试代码生成界面还包含第三区域,候选单元测试对象在第三区域显示。对应地,获取模块401还可以用于:在确定目标入参和目标出参之前,响应针对候选单元测试对象的第三选择操作,确定目标单元测试对象为第三选择操作选择的单元测试对象,并在第三区域区别显示目标单元测试对象。
155.可选地,候选单元测试对象是响应获取到待测试源代码,识别得到的待测试源代码中包含的单元测试对象。
156.可选地,候选单元测试对象显示在单元测试代码生成界面中,或者,候选单元测试对象包含在清单文件中。
157.可选地,单元测试代码生成界面中还包括第二控件,第二控件用于获取待测试源代码。
158.本技术实施例提供的单元测试代码生成装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此次不再进行赘述。
159.需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,处理模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上处理模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
160.例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,简称asic),或,一个或多个微处理器(digital signal processor,简称dsp),或,一个或者多个现场可编程逻辑门阵列(field programmable gate array,简称fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,简称cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称soc)的形式实现。
161.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品
包括一个或多个计算机指令。在计算机上加载和执行计算机指令时,全部或部分地产生按照本技术实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,简称dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘,(digital video disc,简称dvd))、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
162.图5为本技术一实施例提供的电子设备的结构示意图。如图5所示,该电子设备500包括:至少一个处理器501、存储器502和通信接口503。其中,存储器502和通信接口503通过系统总线与处理器501连接并完成相互间的通信,存储器502用于存储指令,通信接口503用于和其他设备进行通信,处理器501用于调用存储器中的指令以执行如上述单元测试代码生成方法实施例提供的方法步骤,具体实现方式和技术效果类似,这里不再赘述。
163.系统总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
164.通信接口503用于实现数据库访问装置与其他设备(例如客户端、读写库和只读库)之间的通信。
165.存储器502可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
166.处理器501可以是通用处理器,包括中央处理器、网络处理器(network processor,简称np)等;数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程逻辑门阵列(field programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
167.本技术实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如上述单元测试代码生成方法实施例中的方法步骤,具体实现方式和技术效果类似,这里不再赘述。
168.本技术实施例还提供一种程序产品,该程序产品包含计算机执行指令。当计算机执行指令被执行时,以实现如上述单元测试代码生成方法实施例中的方法步骤,具体实现方式和技术效果类似,这里不再赘述。
169.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求书指出。
170.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。