CN112699042A - 一种单元测试案例的生成方法及装置 - Google Patents
一种单元测试案例的生成方法及装置 Download PDFInfo
- Publication number
- CN112699042A CN112699042A CN202110006788.7A CN202110006788A CN112699042A CN 112699042 A CN112699042 A CN 112699042A CN 202110006788 A CN202110006788 A CN 202110006788A CN 112699042 A CN112699042 A CN 112699042A
- Authority
- CN
- China
- Prior art keywords
- service module
- baffle
- name
- case
- mock
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 343
- 238000012360 testing method Methods 0.000 title claims abstract description 93
- 238000004590 computer program Methods 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 14
- 238000012546 transfer Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 12
- 230000004888 barrier function Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种单元测试案例的生成方法及装置,可用于金融领域或其他技术领域。所述方法包括:解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;所述配置文件是预设的;根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。所述装置用于执行上述方法。本发明实施例提供的单元测试案例的生成方法及装置,提高了单元测试案例的生成效率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种单元测试案例的生成方法及装置。
背景技术
单元测试又称模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
现有技术中,每修改一次程序,就会进行至少一次单元测试。当程序员修改完项目源代码,还需要修改一遍单元测试案例代码,利用修改后的单元测试案例来检验项目源代码的正确性。现今银行金融业务产品线繁多且业务场景多,金融产品开发代码量大,金融产品更新快,程序员手动修改单元测试案例代码,工作量大且效率低。因此,如何快速地生成单元测试案例成为本领域需要解决的重要课题。
发明内容
针对现有技术中的问题,本发明实施例提供一种单元测试案例的生成方法及装置,能够至少部分地解决现有技术中存在的问题。
一方面,本发明提出一种单元测试案例的生成方法,包括:
解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;
根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;
根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
另一方面,本发明提供一种单元测试案例的生成装置,包括:
解析单元,用于解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;
获得单元,用于根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;
生成单元,用于根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
再一方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述单元测试案例的生成方法的步骤。
又一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述单元测试案例的生成方法的步骤。
本发明实施例提供的单元测试案例的生成方法及装置,能够解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名,根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法,根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成目标代码文件对应的单元测试案例,能够实现单元测试案例的自动生成,提高了单元测试案例的生成效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例提供的单元测试案例的生成方法的流程示意图。
图2是本发明另一实施例提供的单元测试案例的生成方法的流程示意图。
图3是本发明又一实施例提供的单元测试案例的生成方法的流程示意图。
图4是本发明一实施例提供的单元测试案例的生成装置的结构示意图。
图5是本发明另一实施例提供的单元测试案例的生成装置的结构示意图。
图6是本发明一实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明实施例提供的测试案例的生成方法的执行主体包括但不限于计算机。
为了便于理解本申请提供的技术方案,下面先对本申请技术方案的相关内容进行说明。目标代码文件应为符合开发模块化规范的Java文件,由系统生成其对应的可运行的Junit单元测试案例代码文件,以下称单元测试案例。所述开发模块化规范即程序由多个功能模块组合而成,并且每个功能模块为单一方法调用的代码块,存在确定且单一的输入和输出。
配置文件包括若干名称为挡板的节点构成,每个节点对应着一个挡板(mock)方法,每个节点下存在以下子节点:description(mock方法的描述);class(业务模块中的类名);method(业务模块中的方法名);mockmethod(mock方法名);params(测试数据)。其中,class和method与mockmethod为一一对应内的关系。其作用主要有两点:(1)从目标代码文件中解析出来的一个业务模块,可通过配置文件获取其所对应的mock方法,形成对该业务模块的mock。(2)可以在params节点下以子节点形式配置案例中的输入参数,开发人员可通过维护配置文件中的参数属性,形成多套不同测试数据的测试案例。配置文件可以为XML格式的文件。
图1是本发明一实施例提供的测试案例的生成方法的流程示意图,如图1所示,本发明实施例提供的测试案例的生成方法,包括:
S101、解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;
具体地,读取目标代码文件,解析所述目标代码文件中的源代码可以获得每个业务模块以及每个业务模块的类名和方法名。其中,所述业务模块为所述目标代码文件中的一个功能模块,能够完成特定的功能,每个业务模块包括一个类名和一个方法名。
例如,可以读取目标代码文件,根据代码开发模块化的规范,分析目标代码文件的结构,并根据Java语言的反射机制对所述目标代码文件从上至下进行解释,从目标代码文件中获取各个业务模块所调用的一个类名和一个方法名,还可以获得上述类名对应的输入输出参数。
S102、根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;
具体地,在获得每个业务模块的类名和方法名之后,可以根据每个业务模块的类名和方法名从配置文件中查询获得每个业务模块的类名和方法名对应的mock方法,将查询获得的每个业务模块的类名和方法名对应的mock方法,作为每个业务模块对应的mock方法。其中,所述配置文件是预设的,包括至少一个mock方法,所述mock对应一个类名和一个方法名。所述mock方法是预设的,根据实际需要进行设置,本发明实施例不做限定。
S103、根据各个业务模块、各个业务模块对应的mock方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
具体地,在获得每个业务模块对应的mock方法之后,可以根据各个业务模块、各个业务模块对应的mock方法和案例模版,生成所述目标代码文件对应的单元测试案例。其中,案例模版是预设的,根据实际需要进行设置,本发明实施例不做限定。
例如,可以根据所述源代码中各个业务模块的执行顺序,确定各个业务模块对应的挡板方法的排列顺序,获得挡板方法序列,然后依次设置所述挡板方法序列中的一个业务模块对应的挡板方法为第一执行状态,并设置所述挡板方法序列中其余挡板方法为第二执行状态,获得所述每个业务模块对应的案例,再将每个业务模块对应的案例填入到所述案例模版中,获得所述目标代码文件对应的单元测试案例。
本发明实施例提供的单元测试案例的生成方法,能够解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名,根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法,根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成目标代码文件对应的单元测试案例,实现单元测试案例的自动生成,提高了单元测试案例的生成效率。
图2是本发明另一实施例提供的单元测试案例的生成方法的流程示意图,如图2所示,在上述各实施例的基础上,进一步地,所述根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例包括:
S1031、根据所述源代码中各个业务模块的执行顺序,确定各个业务模块对应的挡板方法的排列顺序,获得挡板方法序列;
具体地,在解析所述目标代码文件中的源代码时,可以获得所述源代码中各个业务模块的执行顺序,然后根据各个业务模块的执行顺序对各个业务模块对应的mock方法进行排序,可以获得mock方法序列。其中,mock方法序列中包括每个业务模块对应的mock方法。
例如,对于一个实现柜面转账业务的代码文件A,可以从代码文件A的源代码中解析出客户信息预查询业务模块、检查账户状态业务模块和转账业务模块,并且上述三个业务模块依次执行。通过反射机制,可以获取到客户信息预查询业务模块调用的接口为Cino类的cinoPreqry方法,检查账户状态业务模块调用的接口为Account类的checkAccount方法,转账业务模块调用的接口为Account类的transfer方法。在配置文件中可以查询获得,Cino类和cinoPreqry方法对应mockCinoPreqry,Account类和checkAccount方法对应mockCheckAccount,Account类和transfer方法对应mockTransfer。mockCinoPreqry,mockCheckAccount和mockTransfer为mock方法。根据客户信息预查询业务模块、检查账户状态业务模块和转账业务模块依次执行的顺序,可以获得mock方法序列为mockCinoPreqry,mockCheckAccount和mockTransfer。
S1032、依次设置所述挡板方法序列中的一个业务模块对应的挡板方法为第一执行状态,并设置所述挡板方法序列中其余挡板方法为第二执行状态,获得所述每个业务模块对应的案例;
具体地,在获得mock方法序列之后,可以设置所述挡板方法序列中的一个业务模块对应的mock方法为第一执行状态,并设置所述mock方法序列中其余挡板方法为第二执行状态,获得一个业务模块对应的案例。对mock方法序列中的mock方法依次执行上述过程,可以获得每个业务模块对应的案例。其中,第一执行状态,表明会对mock方法对应的业务模块进行测试;第二执行状态表明,不会对mock方法对应的业务模块进行测试,并将对应的业务模块mock掉。
例如,在获得mock方法序列mockCinoPreqry,mockCheckAccount和mockTransfer之后,设置mockCinoPreqry为第一执行状态,mockCheckAccount和mockTransfer为第二执行状态,获得客户信息预查询业务模块对应的案例为mockCinoPreqry(true);mockCheckAccount(false);mockTransfer(false)。设置mockCheckAccount为第一执行状态,mockCinoPreqry和mockTransfer为第二执行状态,获得检查账户状态业务模块对应的案例为mockCinoPreqry(false);mockCheckAccount(true);mockTransfer(false)。设置mockTransfer为第一执行状态,mockCinoPreqry和mockTransfer为第二执行状态,获得转账业务模块对应的案例为mockCinoPreqry(false);mockCheckAccount(false);mockTransfer(true)。其中,true表示第一执行状态,false表示第二执行状态。
S1033、将每个业务模块对应的案例填入到所述案例模版中,获得所述目标代码文件对应的单元测试案例。
具体地,在获得每个业务模块对应的案例之后,将每个业务模块对应的案例填入到所述案例模版中,从而获得所述目标代码文件对应的单元测试案例。执行上述单元测试案例,能够检验目标代码文件的正确性。其中,案例模板是预设的,案例模板的内容为固定格式,包括mock方法的基础格式以及断言,将每个业务模块对应的mock方法填入案例模板即形成所述目标代码文件对应的单元测试案例。
例如,实现柜面转账的业务的代码文件A对应的单元测试案例包括如下代码:
public void test_XXXA(){
mockCinoPreqry(true);
mockCheckAccount(false);
mockTransfer(false);
OperationResponse result=doPositive();
Assert.asserEquals(result.getResult(),OperationResult.SUCCESS,"");
}
public void test_XXXB(){
mockCinoPreqry(false);
mockCheckAccount(true);
mockTransfer(false);
OperationResponse result=doPositive();
Assert.asserEquals(result.getResult(),OperationResult.SUCCESS,"");
}
public void test_XXXC(){
mockCinoPreqry(false);
mockCheckAccount(false);
mockTransfer(true);
OperationResponse result=doPositive();
Assert.asserEquals(result.getResult(),OperationResult.SUCCESS,"");
}
上述柜面转账的业务的代码文件A对应的单元测试案包括的代码中,其中带有Mock前缀的方法即经过解析后生成的mock方法集合,true和false为mock方法对应的开关属性。每个业务模块对应的案例中,只有一个mock方法的开关属性为true,表明此案例中通过该mock方法验证业务模块是否正常,其余mock方法的开关属性为false。
实现柜面转账的业务的代码文件A对应的单元测试案例执行时,将依次执行客户信息预查询业务模块对应的案例、检查账户状态业务模块对应的案例和转账业务模块对应的案例。在执行每个案例时,依次执行每个案例的各个mock方法,mock方法使用的是jmockit框架,其主要功能是对程序进行打桩,可执行源代码程序特定的代码。当mock方法对应的开关属性为false时,mock方法执行模拟运行过程,方法会读取配置的测试数据作为输入参数,生成预设的结果;当开关属性为true时,mock方法执行对应的业务模块的源程序的逻辑,以测试业务模块的源程序的正确性。
在上述各实施例的基础上,进一步地,每个挡板方法对应一个开关属性,所述开关属性打开对应所述第一执行状态,所述开关属性关闭对应所述第二执行状态。
具体地,业务模块对应的mock方法可以存储到Mock库中,Mock库一个由java程序编写的mock方法集合。Mock库需手工维护,依靠开发人员日常积累,完善对不同业务模块的Mock方法。每个mock方法都可以包括一个开关属性,当开关打开时即表示mock方法处于第一执行状态,需对mock方法对应的业务模块进行测试,可藉由mock方法的开关属性控制不同业务模块对应的mock方法来生成不同的业务模块的案例。当开关关闭时即表示mock方法处于第二执行状态,不会对mock方法对应的业务模块进行测试,将mock方法对应的业务模块mock掉。
在上述各实施例的基础上,进一步地,所述mock方法对应一个类名和一个方法名;相应地,所述根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法包括:
具体地,Mock方法对应的类名和方法名用于进行业务模块的匹配。将mock方法对应的类名与业务模块的类名进行比较,并将mock方法对应的方法名与业务模块对应的方法名进行比较,如果所述挡板方法对应的类名与所述业务模块的类名相同且所述挡板方法对应的方法名与所述业务模块的方法名相同,那么将该mock方法作为所述业务模块对应的挡板方法。如果所述挡板方法对应的类名与所述业务模块的类名不相同或者所述挡板方法对应的方法名与所述业务模块的方法名不相同,那么该mock方法不是所述业务模块对应的挡板方法。
其中,mock方法还对应测试数据,在mock掉某些业务模块时,需要提供输入参数,模拟业务模块的运行,在设置mock方法时设置测试数据作为对应的模拟业务模块执行的输入参数。
下面以一个具体的实施例来说明本发明实施例提供的单元测试案例的生成方法的实现过程。
目标代码文件为一个无界面工具文件,目录结构包含可执行文件generate.exe,主程序目录以及输入目录source和输出目录output。将无界面工具文件放入source目录下,点击generate.exe可调用本发明实施例提供的单元测试案例的生成方法,读取source下的无界面工具文件进行处理,处理完成后在output目录下生成无界面工具文件对应的单元测试案例,上述单元测试案例以代码文件的形式存储。其中无界面工具文件应为符合开发模块化规范的Java文件。计算机会读取无界面工具文件的源代码内容,根据方法是公开还是私有来判断其中存在多少需要进行单元测试的业务模块,并依次地对这些业务模块做处理。
计算机会将无界面工具文件的源代码分割成若干个业务模块,再通过反射机制,从中获取每个业务模块调用的类名和方法名,并将每个业务模块的类名和方法名同配置文件匹配,获取每个业务模块对应的mock方法。每一个mock方法为一个功能点的mock,将若干个业务模块处理完成后,最终将输出一个mock方法的列表。计算机将mock方法的列表汇总,按照step-by-step的单元测试思路依次生成每个业务模块对应的案例,每个案例只包括一个业务模块的测试,设置需要进行测试的业务模块的开关属性打开,将该案例中其余mock方法的开关属性关闭,将该案例中无需测试的业务模块mock掉。在生成每个业务模块的案例之后,将每个业务模块的案例填入到案例模版中,生成无界面工具文件对应的单元测试案例并写入到代码文件中存储。
图3是本发明又一实施例提供的单元测试案例的生成方法的流程示意图,如图3所示,本发明实施例提供的单元测试案例的生成方法的流程如下:
第一步、解析目标代码文件。计算机可以读取目标代码文件,解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名。解析后可以确定目标代码文件的源代码中包括多少个需要进行测试的业务模块。
第二步、匹配mock方法。计算机根据每个业务模块的类名和方法名从配置文件中查询对应的mock方法,如果业务模块的类名和方法名分别与mock方法对应的类名和方法名相同,那么该业务模块与mock方法匹配,获得该业务模块对应的mock方法。计算机可以获得每个业务模块对应的mock方法。
第三步、获得mock方法序列。计算机在解析所述目标代码文件中的源代码时,可以获得所述源代码中各个业务模块的执行顺序,然后将每个业务模块对应的mock方法按照各个业务模块的执行顺序进行排列,可以获得mock方法序列。
第四步、获得每个业务模块对应的案例。在mock方法序列中,打开一个mock方法的开关属性,同时关闭其余mock方法的开关属性,可以获得一个打开开关属性的mock方法对应的业务模块对应的案例。对mock方法序列中的每个mock方法依次执行上述过程,可以获得每个业务模块对应的案例。
第五步、生成单元测试案例。将每个业务模块对应的案例填入到案例模版中,从而获得所述目标代码文件对应的单元测试案例。
图4是本发明一实施例提供的单元测试案例的生成装置的结构示意图,如图4所示,本发明实施例提供的单元测试案例的生成装置包括解析单元401、获得单元402和生成单元403,其中:
解析单元401用于解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;获得单元402用于根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;生成单元403用于根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
具体地,解析单元401读取目标代码文件,解析所述目标代码文件中的源代码可以获得每个业务模块以及每个业务模块的类名和方法名。其中,所述业务模块为所述目标代码文件中的一个功能模块,能够完成特定的功能,每个业务模块包括一个类名和一个方法名。
在获得每个业务模块的类名和方法名之后,获得单元402可以根据每个业务模块的类名和方法名从配置文件中查询获得每个业务模块的类名和方法名对应的mock方法,将查询获得的每个业务模块的类名和方法名对应的mock方法,作为每个业务模块对应的mock方法。其中,所述配置文件是预设的,包括至少一个mock方法,所述mock对应一个类名和一个方法名。所述mock方法是预设的,根据实际需要进行设置,本发明实施例不做限定。
在获得每个业务模块对应的mock方法之后,生成单元403可以根据各个业务模块、各个业务模块对应的mock方法和案例模版,生成所述目标代码文件对应的单元测试案例。其中,案例模版是预设的,根据实际需要进行设置,本发明实施例不做限定。
本发明实施例提供的单元测试案例的生成装置,能够解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名,根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法,根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成目标代码文件对应的单元测试案例,实现单元测试案例的自动生成,提高了单元测试案例的生成效率。
图5是本发明另一实施例提供的单元测试案例的生成装置的结构示意图,如图所示,在上述各实施例的基础上,进一步地,生成单元403包括确定子单元4031、设置子单元4032和获得子单元4033,其中:
确定子单元4031用于根据所述源代码中各个业务模块的执行顺序,确定各个业务模块对应的挡板方法的排列顺序,获得挡板方法序列;设置子单元4032用于依次设置所述挡板方法序列中的一个业务模块对应的挡板方法为第一执行状态,并设置所述挡板方法序列中其余挡板方法为第二执行状态,获得所述每个业务模块对应的案例;获得子单元4033用于将每个业务模块对应的案例填入到所述案例模版中,获得所述目标代码文件对应的单元测试案例。
具体地,在解析所述目标代码文件中的源代码时,确定子单元4031可以获得所述源代码中各个业务模块的执行顺序,然后根据各个业务模块的执行顺序对各个业务模块对应的mock方法进行排序,可以获得mock方法序列。其中,mock方法序列中包括每个业务模块对应的mock方法。
在获得mock方法序列之后,设置子单元4032可以设置所述挡板方法序列中的一个业务模块对应的mock方法为第一执行状态,并设置所述mock方法序列中其余挡板方法为第二执行状态,获得一个业务模块对应的案例。其中,第一执行状态,表明会对mock方法对应的业务模块进行测试;第二执行状态表明,不会对mock方法对应的业务模块进行测试,并将对应的业务模块mock掉。
在获得每个业务模块对应的案例之后,获得子单元4033将每个业务模块对应的案例填入到所述案例模版中,从而获得所述目标代码文件对应的单元测试案例。执行上述单元测试案例,能够检验目标代码文件的正确性。其中,案例模板是预设的,案例模板的内容为固定格式,包括mock方法的基础格式以及断言,将每个业务模块对应的mock方法填入案例模板即形成所述目标代码文件对应的单元测试案例。
在上述各实施例的基础上,进一步地,每个挡板方法对应一个开关属性,所述开关属性打开对应所述第一执行状态,所述开关属性关闭对应所述第二执行状态。
具体地,业务模块对应的mock方法可以存储到Mock库中,Mock库一个由java程序编写的mock方法集合。Mock库需手工维护,依靠开发人员日常积累,完善对不同业务模块的Mock方法。每个mock方法都可以包括一个开关属性,当开关打开时即表示mock方法处于第一执行状态,需对mock方法对应的业务模块进行mock,可藉由mock方法的开关属性控制不同业务模块对应的mock方法来生成不同的业务模块的案例。当开关关闭时即表示mock方法处于第二执行状态,不会对mock方法对应的业务模块进行测试,将mock方法对应的业务模块mock掉。
在上述各实施例的基础上,进一步地,所述挡板方法对应一个类名和一个方法名;相应地,获得单元402具体用于:
在所述挡板方法对应的类名与所述业务模块的类名相同且所述挡板方法对应的方法名与所述业务模块的方法名相同之后,将所述挡板方法作为所述业务模块对应的挡板方法。
具体地,Mock方法对应的类名和方法名用于进行业务模块的匹配。获得单元402将mock方法对应的类名与业务模块的类名进行比较,并将mock方法对应的方法名与业务模块对应的方法名进行比较,如果所述挡板方法对应的类名与所述业务模块的类名相同且所述挡板方法对应的方法名与所述业务模块的方法名相同,那么将该mock方法作为所述业务模块对应的挡板方法。如果所述挡板方法对应的类名与所述业务模块的类名不相同或者所述挡板方法对应的方法名与所述业务模块的方法名不相同,那么该mock方法不是所述业务模块对应的挡板方法。
本发明实施例提供的装置的实施例具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
需要说明的是,本发明实施例提供的单元测试案例的生成方法及装置可用于金融领域,也可用于除金融领域之外的任意技术领域,本发明实施例对单元测试案例的生成方法及装置的应用领域不做限定。
图6是本发明一实施例提供的电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)601、通信接口(Communications Interface)602、存储器(memory)603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信。处理器601可以调用存储器603中的逻辑指令,以执行如下方法:解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
此外,上述的存储器603中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种单元测试案例的生成方法,其特征在于,包括:
解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;
根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;
根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
2.根据权利要求1所述的方法,其特征在于,所述根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例包括:
根据所述源代码中各个业务模块的执行顺序,确定各个业务模块对应的挡板方法的排列顺序,获得挡板方法序列;
依次设置所述挡板方法序列中的一个业务模块对应的挡板方法为第一执行状态,并设置所述挡板方法序列中其余挡板方法为第二执行状态,获得所述每个业务模块对应的案例;
将每个业务模块对应的案例填入到所述案例模版中,获得所述目标代码文件对应的单元测试案例。
3.根据权利要求2所述的方法,其特征在于,每个挡板方法对应一个开关属性,所述开关属性打开对应所述第一执行状态,所述开关属性关闭对应所述第二执行状态。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述挡板方法对应一个类名和一个方法名;相应地,所述根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法包括:
若所述挡板方法对应的类名与所述业务模块的类名相同且所述挡板方法对应的方法名与所述业务模块的方法名相同,则将所述挡板方法作为所述业务模块对应的挡板方法。
5.一种单元测试案例的生成装置,其特征在于,包括:
解析单元,用于解析目标代码文件中的源代码,获得每个业务模块以及每个业务模块的类名和方法名;
获得单元,用于根据每个业务模块的类名和方法名从配置文件中,获得每个业务模块对应的挡板方法;其中,所述配置文件是预设的;
生成单元,用于根据各个业务模块、各个业务模块对应的挡板方法和案例模版,生成所述目标代码文件对应的单元测试案例;其中,所述案例模版是预设的。
6.根据权利要求5所述的装置,其特征在于,所述生成单元包括:
确定子单元,用于根据所述源代码中各个业务模块的执行顺序,确定各个业务模块对应的挡板方法的排列顺序,获得挡板方法序列;
设置子单元,用于依次设置所述挡板方法序列中的一个业务模块对应的挡板方法为第一执行状态,并设置所述挡板方法序列中其余挡板方法为第二执行状态,获得所述每个业务模块对应的案例;
获得子单元,用于将每个业务模块对应的案例填入到所述案例模版中,获得所述目标代码文件对应的单元测试案例。
7.根据权利要求6所述的装置,其特征在于,每个挡板方法对应一个开关属性,所述开关属性打开对应所述第一执行状态,所述开关属性关闭对应所述第二执行状态。
8.根据权利要求5至7任一项所述的装置,其特征在于,所述挡板方法对应一个类名和一个方法名;相应地,所述获得单元具体用于:
在所述挡板方法对应的类名与所述业务模块的类名相同且所述挡板方法对应的方法名与所述业务模块的方法名相同之后,将所述挡板方法作为所述业务模块对应的挡板方法。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110006788.7A CN112699042B (zh) | 2021-01-05 | 2021-01-05 | 一种单元测试案例的生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110006788.7A CN112699042B (zh) | 2021-01-05 | 2021-01-05 | 一种单元测试案例的生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112699042A true CN112699042A (zh) | 2021-04-23 |
CN112699042B CN112699042B (zh) | 2024-03-01 |
Family
ID=75514682
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110006788.7A Active CN112699042B (zh) | 2021-01-05 | 2021-01-05 | 一种单元测试案例的生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112699042B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113157586A (zh) * | 2021-04-30 | 2021-07-23 | 中国工商银行股份有限公司 | 一种金融市场单元测试案例生成方法及装置 |
CN113448874A (zh) * | 2021-07-26 | 2021-09-28 | 中国工商银行股份有限公司 | 一种单元测试脚本的生成方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080256517A1 (en) * | 2006-10-18 | 2008-10-16 | International Business Machines Corporation | Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems |
CN110569159A (zh) * | 2019-09-05 | 2019-12-13 | 深圳前海微众银行股份有限公司 | 挡板生成方法、装置、设备及计算机存储介质 |
-
2021
- 2021-01-05 CN CN202110006788.7A patent/CN112699042B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080256517A1 (en) * | 2006-10-18 | 2008-10-16 | International Business Machines Corporation | Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems |
CN110569159A (zh) * | 2019-09-05 | 2019-12-13 | 深圳前海微众银行股份有限公司 | 挡板生成方法、装置、设备及计算机存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113157586A (zh) * | 2021-04-30 | 2021-07-23 | 中国工商银行股份有限公司 | 一种金融市场单元测试案例生成方法及装置 |
CN113157586B (zh) * | 2021-04-30 | 2024-04-05 | 中国工商银行股份有限公司 | 一种金融市场单元测试案例生成方法及装置 |
CN113448874A (zh) * | 2021-07-26 | 2021-09-28 | 中国工商银行股份有限公司 | 一种单元测试脚本的生成方法及装置 |
CN113448874B (zh) * | 2021-07-26 | 2024-08-02 | 中国工商银行股份有限公司 | 一种单元测试脚本的生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112699042B (zh) | 2024-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9419884B1 (en) | Intelligent automated testing method for restful web services | |
Bertolino et al. | Deriving test plans from architectural descriptions | |
WO2019216976A1 (en) | Analytics for an automated application testing platform | |
Tappler et al. | Time to learn–learning timed automata from tests | |
CN114625353A (zh) | 模型框架代码生成系统及方法 | |
CN110276074B (zh) | 自然语言处理的分布式训练方法、装置、设备及存储介质 | |
CN112699042B (zh) | 一种单元测试案例的生成方法及装置 | |
CN111722839A (zh) | 一种代码生成方法、装置、电子设备及存储介质 | |
CN111752846B (zh) | 一种接口测试方法及装置 | |
CN112559525B (zh) | 数据检查系统、方法、装置和服务器 | |
CN109240923B (zh) | 接口测试脚本的生成方法及计算机可读存储介质 | |
CN112328226A (zh) | 一种嵌入式系统自动化测试代码生成方法及装置 | |
CN111651365B (zh) | 接口自动化测试方法及装置 | |
CN117632710A (zh) | 测试代码的生成方法、装置、设备及存储介质 | |
CN113448678A (zh) | 应用信息生成方法、部署方法及装置、系统、存储介质 | |
CN110659063A (zh) | 软件项目重构方法、装置、计算机装置及存储介质 | |
Craggs et al. | Agedis case studies: Model-based testing in industry | |
US11954102B1 (en) | Structured query language query execution using natural language and related techniques | |
CN117235527A (zh) | 端到端容器化的大数据模型构建方法、装置、设备及介质 | |
CN112416333A (zh) | 软件模型训练方法、装置、系统、设备和存储介质 | |
CN117707917A (zh) | 业务测试方法、装置及设备、介质、产品 | |
CN113590217A (zh) | 基于引擎的函数管理方法、装置、电子设备及存储介质 | |
CN113610242A (zh) | 数据处理方法、装置和服务器 | |
Andreozzi et al. | A framework for large-scale simulations and output result analysis with ns-2 | |
CN112363700A (zh) | 智能合约的协同创建方法、装置、计算机设备和存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |