CN114356783A - 单元测试代码自动生成方法、装置、存储介质及设备 - Google Patents

单元测试代码自动生成方法、装置、存储介质及设备 Download PDF

Info

Publication number
CN114356783A
CN114356783A CN202210066120.6A CN202210066120A CN114356783A CN 114356783 A CN114356783 A CN 114356783A CN 202210066120 A CN202210066120 A CN 202210066120A CN 114356783 A CN114356783 A CN 114356783A
Authority
CN
China
Prior art keywords
java class
cases
definition file
annotations
unit test
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210066120.6A
Other languages
English (en)
Inventor
梁子健
陈禹旭
崔焱
代昊琦
康旖
刘明伟
刘竹青
任昊文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Southern Power Grid Digital Grid Research Institute Co Ltd
Original Assignee
Southern Power Grid Digital Grid Research Institute Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Southern Power Grid Digital Grid Research Institute Co Ltd filed Critical Southern Power Grid Digital Grid Research Institute Co Ltd
Priority to CN202210066120.6A priority Critical patent/CN114356783A/zh
Publication of CN114356783A publication Critical patent/CN114356783A/zh
Pending legal-status Critical Current

Links

Images

Abstract

本发明实施例公开了单元测试代码自动生成方法、装置、存储介质及设备,涉及单元测试技术领域,能有效解决当前编写单元测试代码占用程序员工作量大的问题。该方法包括:获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,Cases注解包括针对待测方法的至少一个测试用例;扫描Java类中的所有的Swagger注解和Cases注解,并生成与Java类对应的定义文件,定义文件包括至少一个待测方法的定义信息;根据定义文件和预先获得的单元测试代码模板,生成与测试用例一一对应的单元测试代码。

Description

单元测试代码自动生成方法、装置、存储介质及设备
技术领域
本发明涉及单元测试技术领域,具体涉及一种单元测试代码自动生成方法、装置、存储介质及设备。
背景技术
在编写java代码的时候,需要尽可能多的为编写的业务代码(类或方法等)配套编写相关的单元测试代码,这些单元测试代码会在构建过程中的某个节点被触发执行,以快速验证业务代码的正确性,这样还能保证在未来对业务代码的修改过程不会破坏原本的预期。
具体而言,单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。比如对函数abs(),可以编写出以下几个测试用例:输入非数值类型,比如None、[]、{},期待抛出TypeError。把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。如果单元测试通过,说明我们测试的这个函数能够正常工作。如果单元测试不通过,要么函数有bug,要么测试条件输入不正确,总之,需要修复使单元测试能够通过。单元测试通过后的意义在于:如果我们对abs()函数代码做了修改,只需要再跑一遍单元测试,如果通过,说明我们的修改不会对abs()函数原有的行为造成影响,如果测试不通过,说明我们的修改与原有行为不一致,要么修改函数代码,要么修改测试用例。
因此,单元测试对于软件开发来说是非常重要的。然而,在现实工作中,经常会人为的忽略单元测试代码的编写,这是因为编写单元测试代码需要大量的时间,这让原本就忙于编写业务代码的程序员根本无暇顾及。
发明内容
本发明实施例提供一种单元测试代码自动生成方法、装置、存储介质及设备,能有效解决当前编写单元测试代码占用程序员工作量大的问题。
为了解决上述问题,从第一方面,本发明实施例公开了一种单元测试代码的自动生成方法,所述方法包括:
获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,所述Cases注解包括针对所述待测方法的至少一个测试用例;
扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件,所述定义文件包括至少一个所述待测方法的定义信息;
根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码。
进一步的,所述方法还包括:
在生成与所述Java类对应的定义文件后,将所述定义文件存储在所述Java类对应的第一目录下,其中,所述第一目录与用于存储所述Java类的目录不同;和
在生成与所述测试用例一一对应的单元测试代码后,将所述单元测试代码存储在所述Java类对应的第二目录下,其中,所述第二目录与所述第一目录以及存储有所述Java类的目录均不同。
进一步的,所述方法还包括:
接收用户通过Java构建工具在预设阶段编译的任务一;其中,所述任务一为扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件;
所述扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件的步骤包括:
在接收到执行所述任务一的触发操作时,扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件。
进一步的,所述扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件的步骤包括:
扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,获得在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,和/或,获得在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解;
根据在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,在所述定义文件中,将针对所述历史待测方法的定义信息更新;
根据在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解,在所述定义文件中新增对所述新增待测方法的定义信息。
进一步的,所述方法还包括:
接收用户通过Java构建工具在预设阶段编译的任务二;其中,所述任务二为根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码;
所述根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码的步骤包括:
在接收到执行所述任务二的触发操作时,根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码。
进一步的,所述方法还包括:
接收用户自定义构建的所述单元测试代码模板;
将所述单元测试代码模板存储在所述Java类对应的第三目录下,所述第三目录与所述第一目录、所述第二目录以及存储有所述Java类的目录均不同。
进一步的,所述方法还包括:在生成与所述Java类对应的定义文件后,将所述定义文件上传至服务器。
从第二方面,本发明实施例公开了一种单元测试代码的自动生成装置,所述装置包括:
注解获得模块,用于获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,所述Cases注解包括针对所述待测方法的至少一个测试用例;
定义文件生成模块,用于扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件,所述定义文件包括至少一个所述待测方法的定义信息;
测试代码生成模块,用于根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码。
进一步的,该装置还包括:
第一存储模块,用于在生成与所述Java类对应的定义文件后,将所述定义文件存储在所述Java类对应的第一目录下,其中,所述第一目录与用于存储所述Java类的目录不同;和
第二存储模块,用于在生成与所述测试用例一一对应的单元测试代码后,将所述单元测试代码存储在所述Java类对应的第二目录下,其中,所述第二目录与所述第一目录以及存储有所述Java类的目录均不同。
进一步的,该装置还包括:
任务一接收模块,用于接收用户通过Java构建工具在预设阶段编译的任务一;其中,所述任务一为扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件;
定义文件生成模块具体可以用于在接收到执行所述任务一的触发操作时,扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件。
进一步的,定义文件生成模块包括:
解析子模块,用于扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,获得在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,和/或,获得在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解;
第一更新模块,用于根据在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,在所述定义文件中,将针对所述历史待测方法的定义信息更新;
第二更新模块,用于根据在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解,在所述定义文件中新增对所述新增待测方法的定义信息。
进一步的,该装置还包括:
任务二接收模块,用于接收用户通过Java构建工具在预设阶段编译的任务二;其中,所述任务二为根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码;
所述测试代码生成模块具体可以用于在接收到执行所述任务二的触发操作时,根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码。
进一步的,该装置还包括:
单元测试代码模板构建模块,用于接收用户自定义构建的所述单元测试代码模板;
第三存储模块,用于将所述单元测试代码模板存储在所述Java类对应的第三目录下,所述第三目录与所述第一目录、所述第二目录以及存储有所述Java类的目录均不同。
进一步的,该装置还包括:
定义文件上传模块,用于在生成与所述Java类对应的定义文件后,将所述定义文件上传至服务器。
从第三方面,本发明实施例公开了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如本发明实施例所述的方法中的步骤。
从第四方面,本发明实施例公开了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如本发明实施例所述的方法中的步骤。
本发明实施例包括以下优点:
本发明实施例提供了一种单元测试代码的自动生成方法,该方法首次采用在Java类的至少一个待测方法上标注Swagger注解和Cases注解的方式获得该待测方法的特征,此种方式无需语义分析,实现比较简单,无需额外的文档,只需在待测方法上加入相关注解,使用注解非常符合程序员的习惯,且测试的数据以case注解的形式出现,避免了额外准备数据来源,由于在待测方法上使用注解,还可以保证注解内容和待测方法的代码的一致性,不会生成过时的测试代码;
在该方法中,本发明实施例在具有该Swagger注解和Cases注解的Java类源代码上,扫描该Java类中的所有的Swagger注解和Cases注解,并生成与Java类对应的定义文件,然后再根据该定义文件和预先获得的单元测试代码模板,生成与每个测试用例一一对应的单元测试代码,如此有效解决当前编写单元测试代码占用程序员工作量大的问题。
本发明实施例在编译的时候先生成定义文件,然后再根据定义文件生成测试代码,好处是:程序开发时会频繁的执行任务,这使得定义文件的生成可以是增量的,例如,先写了5个待测方法,然后执行编译,生成包括这5个待测方法的定义信息的定义文件,然后又写了两个待测方法,再执行编译,此时只需要在定义文件中增量的追加这两个新增方法的定义信息即可,若之前写的5个方法中一个发生变化,也只需对变化的部分进行更新,这使得定义文件的生成速度会很快。另外,生成单元测试代码时可只读取定义文件,而不需要再去遍历所有的业务代码并解析其中的相关注解,这让单元测试代码的生成速度也会很快。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例单元测试代码的自动生成方法的步骤流程图;
图2是本发明实施例单元测试代码的自动生成装置的功能模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对本发明的技术问题,相关技术中也提供有一些自动生成单元测试代码的方案,但这些方案通常存在以下问题:
1)相关技术中提出有预先读取详细设计文档中的接口规格,然后根据这个规格生成代码的方案。该方案的问题在于一是必须先编写详细设计,这一点在目前的软件开发领域较难做到,尤其是在敏捷开发过程中很少会写详细设计文档;另一个问题是详细设计文档的维护经常落后于实际代码的编写,根据这个文档生成出的单元测试代码存在过时的可能。
2)相关技术中提出有对待测代码进行语义分析后,根据分析得出的特征信息生成单元测试代码的方案。该方案的问题是语义分析的实现难度非常大,并且对于代码量较大的待测代码,可能耗时很久。
3)相关技术中提出有仅分析代码中的if条件,然后根据if条件生成单元测试代码的方案。该方案的问题比较多,例如,若方法中并无if条件语句,只是对输入的参数进行业务逻辑上的加工,该方案就无法使用了。
有鉴于此,本发明提出了一种单元测试代码的自动生成方法,参考图1,图1示出了本发明实施例单元测试代码的自动生成方法的步骤流程图,该方法可以包括:
步骤S101:获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,所述Cases注解包括针对所述待测方法的至少一个测试用例;
其中,类是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在代码开发中,Java类可以是某个业务模块的源代码集合,如当前开发的业务模块为“用户基本信息”,则Java类表示“用户基本信息”下所有源代码的集合。待测方法是一个需要进行单元测试的业务方法,其属于业务模块下的一个单元(也可称子模块),如当前开发的需要进行单元测试的业务方法为“创建用户”,其属于“用户基本信息”这一Java类下的一个单元,则待测方法表示“创建用户”下所有源代码的集合。
Swagger原本是定义API(Application Programming Interface,应用程序接口)的一种工具。不同于Swagger原有的使用意图,本发明将Swagger应用于测试方法的源代码上,即在Java类的开发过程中,用户(程序员)可以使用swagger-annotation直接在待测方法上进行标注得到本发明中的Swagger注解。其中,Swagger注解可以包括该待测方法的名称(如为“创建用户”)、所属的Java类(如属于“用户基本信息”这一Java类)、描述、输入参数、参数类型、输出参数等信息。
一个测试用例(Test Case)是一组执行,以验证软件应用程序的具体特征或功能的行为。测试用例包括特定的变量或条件,程序员可以使用这些变量或条件来比较预期结果和实际结果,以确定软件产品是否按照客户的要求运行。由于一个待测方法中会涉及多项测试,如针对“检查登录功能”这一待测方法,可以有多项测试用例:如测试用例1:检查输入有效的用户ID和密码的结果,测试用例2:在输入无效的用户ID和密码时检查结果,测试用例3:在按下用户ID为“空”和“登录”按钮后,检查响应。
针对测试用例的上述特性,本发明将测试用例采用case注解的形式出现,case注解可以由用户在待测方法这一源代码上标注。一个Cases注解对应一个待测方法,每个Cases注解包括若干个case注解,每个case注解对应一条测试用例。因此,本发明在待测方法上标记的一个Cases注解可以理解为针对该待测方法的所有测试用例的集合。每个测试用例均包括input()和output()等属性,input对应了输入值,output对应了输出值。其中,input和output可以为多种类型,例如:为一些固定的值,或input是一条从数据库中读取数据的sql语句,而output可以是一条验证数据库中是否存在结果数据的sql语句。
当用户在需要生成单元测试的业务方法上标注了Swagger注解和Cases注解,用户终端的代码开发软件(简称为系统)的界面上会显示该Swagger注解和Cases注解,然后将该Swagger注解和Cases注解随该业务方法一起自动保存至用于存储该业务方法所属的Java类的目录下,如存储src/main目录下。
步骤S102:扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件,所述定义文件包括至少一个所述待测方法的定义信息;
其中,定义信息为根据一个待测方法的Swagger注解和Cases注解所生成的信息。定义文件包括该Java类中的所有待测方法的定义信息。
在本发明中,可将步骤S102的实现过程设定为一个任务,该任务为生成定义文件的任务,通过触发该任务的执行程序或设定该任务的自动执行程序,即可扫描所述Java类中的所有的Swagger注解和Cases注解,并生成与Java类对应的定义文件。
在一实施例中,本发明可以借助java开发中的构建工具实现步骤S102的任务。具体方法包括:
步骤A:接收用户通过Java构建工具在预设阶段编译的任务一;其中,所述任务一为扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件;
步骤S102的实现方式为:在接收到执行所述任务一的触发操作时,扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件。
在本实施例中,Java构建工具为一种可以构建源代码并执行该源代码的工具,可以采用目前java开发中常用的构建工具,如maven、gradle或者ant。关于采用哪种构建工具来实现本发明,在此不作限定。每种构建工具的构建过程具有多种阶段,且不同的构建工具的阶段和数量不同。
用户可以根据自身所选择的构建工具,在对应的阶段(如编译阶段)编译任务一,即创建扫描所述Java类中的所有的Swagger注解和Cases注解,并生成与Java类对应的定义文件的源代码,并可以自动运行该任务一。或在用户手动触发下,系统也会自动执行该任务一。
本实施例通过扫描Java类中的所有的Swagger注解,可以得到特定格式的文件,然后再将扫描到的Cases注解填充至该文件中,即可生成该定义文件。
步骤S103:根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码。
其中,单元测试代码模板可以理解为发明人所开发的一个代码段,其包括自定义的流程。针对不同类型的测试用例,本发明可以配置有不同类型的单元测试代码模板。例如,一个单元测试代码模板的流程为:初始化-调用方法-比对结果。
在实现时,系统首先解析该定义文件,然后获得对应每个待测方法的Swagger注解和Cases注解,接着,调用待测方法的Swagger注解和该待测方法的每一个测试用例,并将Swagger注解信息和该测试用例中的输入值和输出值填充至该单元测试代码模板上对应的位置处,如此可以对应每个测试用例,生成一个对应的单元测试代码。
在一实施例中,本发明可以借助java开发中的构建工具实现步骤S103的任务二。具体方法包括:
步骤B:接收用户通过Java构建工具在预设阶段编译的任务二;其中,所述任务二为根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码;
步骤S103的实现方式为:在接收到执行所述任务二的触发操作时,根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码。
在本实施例中,关于Java构建工具的描述可参考前述内容,本发明在此不多赘述。用户可以根据自身所选择的构建工具,在对应的阶段(如编译阶段)编译任务二,即创建根据预先获得的单元测试代码模板和所述定义文件,生成与所述测试用例一一对应的单元测试代码的源代码。在本发明中,生成后的单元测试代码会存入该Java构建工具专为单元测试预留的目录之中存贮,并会由构建工具进行执行。该执行可以为自动执行,也可以为用户点击运行该任务二,系统依据该触发操作执行该任务二。
综上,本发明实现了单元测试代码的自动生成,极大的节省了程序员编写单元测试代码的时间。相比现有技术,本发明具有如下优点:1)无需语义分析,实现比较简单。2)无需额外的文档,只需在待测方法上加入相关注解,使用注解非常符合程序员的习惯。3)测试用例以case注解的形式出现,避免了额外准备数据来源。4)在业务代码上使用注解会保证注解内容和业务代码的一致性,不会生成过时的测试代码。5)本发明所基于的swagger和maven/gradle等构建工具都是行业中普遍使用的,进一步降低了实现的难度,在使用上也非常便利。
在Java类的开发过程中,用户可以在开发完一个或多个每待测方法后,就对待测方法标注Swagger注解和Cases注解,也可以在所有的待测方法开发完成后,逐一对每个待测方法标注Swagger注解和Cases注解。针对用户在所有的待测方法开发完成后,逐一对每个待测方法标注Swagger注解和Cases注解的情况,本发明可以通过执行步骤S102,一次性得到具有该Java类所有的待测方法的定义信息的定义文件。而针对用户在开发完一个或多个每待测方法后,就对待测方法标注Swagger注解和Cases注解的情况,或针对用户对待测方法的Swagger注解和Cases注解进行更改的情况,在一实施例中,步骤S102生成与Java类对应的定义文件的方法可以如下:
步骤S102-1:系统通过扫描Java类中的所有的Swagger注解和Cases注解,可以获得在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,和/或,获得在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解;
步骤S102-2:系统根据在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,在所述定义文件中,将针对所述历史待测方法的定义信息更新;
步骤S102-3:系统根据在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解,在所述定义文件中新增对所述新增待测方法的定义信息。
其中,历史待测方法为已经标注过Swagger注解和Cases注解的待测方法,当该历史待测方法变化而导致Swagger注解变化,或该历史待测方法的Cases注解被修改时,系统在扫描Java类中的所有的Swagger注解和Cases注解时,都有发现该变化,从而在定义文件中,将针对所述历史待测方法的定义信息更新。新增待测方法为未标注过Swagger注解和Cases注解的待测方法。
综上S102-1~S102-3,可以看出,本发明在编译的时候先生成定义文件,然后再根据定义文件生成测试代码的好处是:程序开发时会频繁的执行任务,这使得定义文件的生成可以是增量的且可分发和传播,例如,先写了5个待测方法,然后执行编译,生成包括这5个待测方法的定义信息的定义文件,然后又写了两个待测方法(此时对应为本申请的新增待测方法),再执行编译,此时只需要在定义文件中增量的追加这两个新增方法的定义信息即可,若之前写的5个方法(此时对应为本申请的历史待测方法)中一个发生变化,也只需对变化的部分进行更新,这使得定义文件的生成速度会很快。另外,生成单元测试代码时可只读取定义文件,而不需要再去遍历所有的业务代码并解析其中的相关注解,这让单元测试代码的生成速度也会很快。
在一实施例中,在生成与所述Java类对应的定义文件后,还可以将定义文件存储在所述Java类对应的第一目录下,其中,所述第一目录与用于存储所述Java类的目录不同。示例的:第一目录为“src/test/resources”,用于存储Java类的目录为“src/main”。
本实施例通过这两个目录,可以将定义文件与Java类这一源代码区分开,当删除第一目录下的定义文件时,也不会影响用于存储该Java类的目录下的源代码和相关注解。此外,本实施例还可以便于将定义文件分享给其他用户,使其他用户不用再对该Java类的源代码进行解析与标注。例如,在生成与所述Java类对应的定义文件后,可以将定义文件上传至服务器,如此定义文件可以通过html页面的形式进行集中的信息展示,便于多个用户同时查看、复制等。
在一实施例中,在生成与所述测试用例一一对应的单元测试代码后,将所述单元测试代码存储在所述Java类对应的第二目录下,其中,所述第二目录与所述第一目录以及存储有所述Java类的目录均不同。示例的:第二目录为“src/test/java”,可见,对应该Java类生成的所有的定义文件和单元测试代码都可以放入“src/test”这一大类目录下,src/test”这一大类目录下还可以放其他Java类对应的定义文件和单元测试代码;同理,如“src/main”这一目录下也可以存储一个开发项目中的多个Java类的源代码。
本实施例通过将单元测试代码所存储的第二目录与第一目录,以及用于存储该Java类的目录相区分,可以在单元测试代码生成后因为某些原因需要删除或重建时,直接在第二目录中将该单元测试代码删除,而不影响定义文件,以及Java类的源代码和其中的相关注解。此外,本实施例还可以便于将单元测试代码分享给其他用户,使其他用户不用再对该Java类的源代码进行解析与标注,就能基于单元测试代码进行单元测试,或自适应修改该单元测试代码。例如,在执行单元测试代码之后,可以将单元测试代码对应的执行结果在系统的控制台上进行显示和/或上传至服务器,以html页面的形式进行展示与分享。
在一实施例中,还提供了以下方法:首先,接收用户自定义构建的所述单元测试代码模板;其次,将所述单元测试代码模板存储在所述Java类对应的第三目录下,所述第三目录与所述第一目录、所述第二目录以及存储有所述Java类的目录均不同。如此,用户可以根据自身需求,便捷地对单元测试代码模板进行修改,还能将单元测试代码模板同单元测试代码一起分享给其他用户,以使其他用户直接使用,或根据自身需求对单元测试代码模板中的流程进行自定义修改。
基于同一发明构思,本发明实施例公开了一种单元测试代码的自动生成装置,参考图2,图2示出了本发明实施例单元测试代码的自动生成装置的功能模块图,该装置可以包括:
注解获得模块201,用于获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,所述Cases注解包括针对所述待测方法的至少一个测试用例;
定义文件生成模块202,用于扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件,所述定义文件包括至少一个所述待测方法的定义信息;
测试代码生成模块203,用于根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码。
进一步的,该装置还包括:
第一存储模块,用于在生成与所述Java类对应的定义文件后,将所述定义文件存储在所述Java类对应的第一目录下,其中,所述第一目录与用于存储所述Java类的目录不同;和
第二存储模块,用于在生成与所述测试用例一一对应的单元测试代码后,将所述单元测试代码存储在所述Java类对应的第二目录下,其中,所述第二目录与所述第一目录以及存储有所述Java类的目录均不同。
进一步的,该装置还包括:
任务一接收模块,用于接收用户通过Java构建工具在预设阶段编译的任务一;其中,所述任务一为扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件;
定义文件生成模块202具体可以用于在接收到执行所述任务一的触发操作时,扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件。
进一步的,定义文件生成模块202包括:
解析子模块,用于扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,获得在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,和/或,获得在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解;
第一更新模块,用于根据在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,在所述定义文件中,将针对所述历史待测方法的定义信息更新;
第二更新模块,用于根据在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解,在所述定义文件中新增对所述新增待测方法的定义信息。
进一步的,该装置还包括:
任务二接收模块,用于接收用户通过Java构建工具在预设阶段编译的任务二;其中,所述任务二为根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码;
所述测试代码生成模块203具体可以用于在接收到执行所述任务二的触发操作时,根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码。
进一步的,该装置还包括:
单元测试代码模板构建模块,用于接收用户自定义构建的所述单元测试代码模板;
第三存储模块,用于将所述单元测试代码模板存储在所述Java类对应的第三目录下,所述第三目录与所述第一目录、所述第二目录以及存储有所述Java类的目录均不同。
进一步的,该装置还包括:
定义文件上传模块,用于在生成与所述Java类对应的定义文件后,将所述定义文件上传至服务器。
进一步的,具体用于还包括:
执行结果显示模块,用于在执行所述单元测试代码之后,将所述单元测试代码对应的执行结果进行显示;
单元测试代码上传模块,用于在执行所述单元测试代码之后,将所述单元测试代码上传至服务器。
基于同一发明构思,本发明实施例还公开了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如本发明实施例所述的方法中的步骤。
基于同一发明构思,本发明实施例还公开了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如本发明实施例所述的方法中的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。“和/或”表示可以选择两者之中的任意一个,也可以两者都选择。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的单元测试代码自动生成方法、装置、存储介质及设备,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种单元测试代码的自动生成方法,其特征在于,所述方法包括:
获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,所述Cases注解包括针对所述待测方法的至少一个测试用例;
扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件,所述定义文件包括至少一个所述待测方法的定义信息;
根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在生成与所述Java类对应的定义文件后,将所述定义文件存储在所述Java类对应的第一目录下,其中,所述第一目录与用于存储所述Java类的目录不同;和
在生成与所述测试用例一一对应的单元测试代码后,将所述单元测试代码存储在所述Java类对应的第二目录下,其中,所述第二目录与所述第一目录以及存储有所述Java类的目录均不同。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收用户通过Java构建工具在预设阶段编译的任务一;其中,所述任务一为扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件;
所述扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件的步骤包括:
在接收到执行所述任务一的触发操作时,扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件。
4.根据权利要求1或3所述的方法,其特征在于,所述扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件的步骤包括:
扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,获得在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,和/或,获得在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解;
根据在所述Java类的历史待测方法上更新的所述Swagger注解和所述Cases注解,在所述定义文件中,将针对所述历史待测方法的定义信息更新;
根据在所述Java类的新增待测方法上标注的所述Swagger注解和所述Cases注解,在所述定义文件中新增对所述新增待测方法的定义信息。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收用户通过Java构建工具在预设阶段编译的任务二;其中,所述任务二为根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码;
所述根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码的步骤包括:
在接收到执行所述任务二的触发操作时,根据所述定义文件和预先获得的单元测试代码模板,生成并执行与所述测试用例一一对应的单元测试代码。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
接收用户自定义构建的所述单元测试代码模板;
将所述单元测试代码模板存储在所述Java类对应的第三目录下,所述第三目录与所述第一目录、所述第二目录以及存储有所述Java类的目录均不同。
7.根据权利要求1或3所述的方法,其特征在于,所述方法还包括:
在生成与所述Java类对应的定义文件后,将所述定义文件上传至服务器。
8.一种单元测试代码的自动生成装置,其特征在于,所述装置包括:
注解获得模块,用于获得用户在Java类的至少一个待测方法上标注的Swagger注解和Cases注解,所述Cases注解包括针对所述待测方法的至少一个测试用例;
定义文件生成模块,用于扫描所述Java类中的所有的所述Swagger注解和所述Cases注解,并生成与所述Java类对应的定义文件,所述定义文件包括至少一个所述待测方法的定义信息;
测试代码生成模块,用于根据所述定义文件和预先获得的单元测试代码模板,生成与所述测试用例一一对应的单元测试代码。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现如权利要求1至7任一所述的方法中的步骤。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现如权利要求1至7任一所述的方法中的步骤。
CN202210066120.6A 2022-01-20 2022-01-20 单元测试代码自动生成方法、装置、存储介质及设备 Pending CN114356783A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210066120.6A CN114356783A (zh) 2022-01-20 2022-01-20 单元测试代码自动生成方法、装置、存储介质及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210066120.6A CN114356783A (zh) 2022-01-20 2022-01-20 单元测试代码自动生成方法、装置、存储介质及设备

Publications (1)

Publication Number Publication Date
CN114356783A true CN114356783A (zh) 2022-04-15

Family

ID=81090894

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210066120.6A Pending CN114356783A (zh) 2022-01-20 2022-01-20 单元测试代码自动生成方法、装置、存储介质及设备

Country Status (1)

Country Link
CN (1) CN114356783A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115470152A (zh) * 2022-11-02 2022-12-13 平安银行股份有限公司 测试代码生成方法、测试代码生成装置以及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115470152A (zh) * 2022-11-02 2022-12-13 平安银行股份有限公司 测试代码生成方法、测试代码生成装置以及存储介质

Similar Documents

Publication Publication Date Title
Ocariza et al. An empirical study of client-side JavaScript bugs
US7231633B2 (en) Debugging with set verbosity level during read and analysis of executable code and associated comments while logging according to set verbosity level
US8645919B2 (en) Generic validation test framework for graphical user interfaces
US7856619B2 (en) Method and system for automated testing of a graphic-based programming tool
US7426717B1 (en) System and method for debugging files in a runtime environment
CN108762743B (zh) 一种数据表操作代码生成方法及装置
US7895575B2 (en) Apparatus and method for generating test driver
CN110825619A (zh) 接口测试用例自动生成方法、装置及存储介质
Angerer et al. Configuration-aware change impact analysis (t)
Paiva et al. From requirements to automated acceptance tests with the RSL language
CN112882718A (zh) 编译处理方法、装置、设备及存储介质
JP6845429B2 (ja) コンパイラプログラム、情報処理装置およびコンパイル方法
Nickel et al. Ibm ilog cplex optimization studio—a primer
JP7115342B2 (ja) デバッグ支援システムおよびデバッグ支援方法
CN114356783A (zh) 单元测试代码自动生成方法、装置、存储介质及设备
CN113760266A (zh) 一种功能模块文件的创建方法、创建装置和电子设备
CN113742215A (zh) 一种自动配置和调用测试工具进行测试分析的方法及系统
US10915302B2 (en) Identification and visualization of associations among code generated from a model and sources that affect code generation
CN116841543A (zh) 基于Flutter动态生成跨平台多端应用的开发方法
CN115291887A (zh) 代码生成方法、装置、设备及存储介质
CN115794214A (zh) 应用模块元数据管理方法、设备、存储介质及装置
KR100417655B1 (ko) 최적화과정을참조하면서동작검증을행하도록디버그정보를생성하는디버그정보생성장치및프로그래머가최적화과정을의식하면서동작검증을할수있는디버그장치로이루어지는프로그램개발시스템
CN114924737A (zh) 一种电池管理系统源代码集成测试方法、测试装置及电子设备
CN112230904A (zh) 基于接口文档的代码生成方法、装置、存储介质及服务器
Freeman Pro Go

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Liang Zijian

Inventor after: Chen Yuxu

Inventor after: Cui Yan

Inventor after: Dai Haoqi

Inventor after: Kang Yi

Inventor after: Liu Mingwei

Inventor after: Liu Zhuqing

Inventor after: Ren Haowen

Inventor after: Yang Yang

Inventor before: Liang Zijian

Inventor before: Chen Yuxu

Inventor before: Cui Yan

Inventor before: Dai Haoqi

Inventor before: Kang Yi

Inventor before: Liu Mingwei

Inventor before: Liu Zhuqing

Inventor before: Ren Haowen