用于单元测试的方法、装置以及可读存储介质与流程

文档序号:12719410阅读:272来源:国知局
用于单元测试的方法、装置以及可读存储介质与流程

本发明的实施方式涉及软件测试技术领域,更具体地,本发明的实施方式涉及用于单元测试的方法、装置以及可读存储介质。



背景技术:

本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

单元测试用于对软件中的最小可测试单元进行检查和验证。总的来说,单元就是人为规定的最小的被测功能模块。例如,对于方法级别的单元测试,一个完整的单元测试包括:测试输入、测试代码、测试输出、预期输出、以及验证代码等部分。

由于软件业务变更或者编写之初考虑不全面,单元测试常常需要对应地进行调整。相关技术中,在调整单元测试时,需要修改测试输入、预期输出、测试代码、以及验证代码等。可见基本上调整前的全部内容都需要调整一遍,调整过程中重复工作过多、工作量过多,以至于测试效率不高,并且调整时容易引起人为失误。



技术实现要素:

可见,上述现有技术中的单元测试方法,出于测试数据与代码耦合,添加或修改测试用例时,需要先修改代码,再重新编译发布,有可能会影响测试代码本身的正确性。而且,单元测试代码要求书写者了解基本的代码设计,一个以功能测试为主的团队,往往需要专门安排多人维护单元测试代码或者直接由开发者自己编写。另外,这种单元测试方法让编写者花大精力去调试单元测试代码,弱化了用例本身的覆盖率。而且,所有的单元测试有一定的共通性,每一个单元测试都在重复一个类似的过程。如果不能抽象自动化,每个人都自由发挥,不仅占用时间,而且也容易出错。

为此,非常需要一种改进的用于单元测试的方法和装置,以使测试人员能够高质量和高效地进行单元测试。

在本上下文中,本发明的实施方式期望提供一种用于单元测试的方法和装置。

在本发明实施方式的第一方面中,提供了一种用于单元测试的方法,包括:解析被测单元的信息得到输入参数和输出参数;根据所述输入参数和所述输出参数生成输入界面;通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值;根据所述测试值和所述期望输出值生成单元测试用例。

在一些实施例中,基于前述方案,在生成单元测试用例之后还包括:根据所述单元测试用例生成单元测试代码。

在一些实施例中,基于前述方案,根据所述测试值和所述期望输出值生成单元测试用例包括:根据所述测试值和所述期望输出值生成XML配置文件。

在一些实施例中,基于前述方案,根据所述测试值和所述期望输出值生成XML配置文件之后还包括:根据所述XML配置文件生成单元测试代码。

在一些实施例中,基于前述方案,在生成单元测试代码之后还包括:将所述单元测试代码托管到自动化平台。

在一些实施例中,基于前述方案,在解析被测单元的信息得到输入参数和输出参数之前还包括:创建用于选择所述被测单元的界面。

在一些实施例中,基于前述方案,根据所述输入参数和所述输出参数生成输入界面包括:根据所述输入参数和所述输出参数在所述输入界面分别生成输入框。

在本发明实施方式的第二方面中,提供了一种用于单元测试的装置,包括:解析单元,用于解析被测单元的信息得到输入参数和输出参数;输入界面生成单元,用于根据所述输入参数和所述输出参数生成输入界面;数据接收单元,用于通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值;测试用例生成单元,用于根据所述测试值和所述期望输出值生成单元测试用例。

在一些实施例中,基于前述方案,所述装置还包括测试代码生成单元,用于在生成单元测试用例之后,根据所述单元测试用例生成单元测试代码。

在一些实施例中,基于前述方案,所述测试用例生成单元用于:根据所述测试值和所述期望输出值生成XML配置文件。

在一些实施例中,基于前述方案,所述装置还包括测试代码生成单元,用于根据所述测试值和所述期望输出值生成XML配置文件之后,根据所述XML配置文件生成单元测试代码。

在一些实施例中,基于前述方案,所述装置还包括平台托管单元,用于在生成单元测试代码之后,将所述单元测试代码托管到自动化平台。

在一些实施例中,基于前述方案,所述装置还包括界面创建单元,用于在解析被测单元的信息得到输入参数和输出参数之前,创建用于选择所述被测单元的界面。

在一些实施例中,基于前述方案,所述输入界面生成单元,用于根据所述输入参数和所述输出参数在所述输入界面分别生成输入框。

在本发明实施方式的第三方面中,提供了一种可读存储介质,其上存储有程序,该程序被处理器执行时实现如第一方面中的方法。

根据本发明实施方式的用于单元测试的方法和装置,通过解析被测单元的信息得到输入参数和输出参数,从而生成输入界面接收所述输入参数的测试值和所述输出参数的期望输出值,根据所述测试值和所述期望输出值生成单元测试用例。本发明实施例的技术方案通过界面输入严格校验控制输入输出,可以避免人为失误,使测试人员无需关注被测单元的代码细节,而着重关注单元测试用例的覆盖率,让单元测试代码编写要求更加简单,从而显著地降低了单元测试代码中的重复工作,并且减少了测试人员的工作量,为测试人员带来了更好的体验。

附图说明

通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:

图1示意性地示出了根据本发明实施方式的用于单元测试的方法的流程图;

图2示意性地示出了根据本发明另一实施方式的用于单元测试的方法的流程图;

图3示意性地示出了根据本发明一实施方式的实现逻辑示意图;

图4示意性地示出了根据本发明一实施方式生成的XML配置文件的示意图;

图5示意性地示出了根据本发明实施方式的用于单元测试的装置的框图;

图6示意性地示出了根据本发明另一实施方式的用于单元测试的装置的框图;

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本发明的实施方式,提出了一种用于单元测试的方法和装置。

在本文中,需要理解的是,所涉及的术语待测试的方法表示被测单元中的一种形式。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。

发明概述

本发明人发现,现有技术中的单元测试的方式,效率低下,容易引起人为失误。

为此,本发明的实施方式提供了用于单元测试的方法和装置,在进行单元测试的过程中,根据被测单元的输入输出参数生成输入界面,通过输入界面接收测试值和期望输出值生成测试用例,可以避免数据错误引起人为失误,将测试数据与测试代码进行严格分离,使测试人员不再重复地编写一样的代码,降低了对测试人员的能力要求。

在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

应用场景总览

场景一、软件测试人员需要对代码中的某一被测单元进行单元测试,例如测试一个方法A,该方法A的作用是比较输入的两个参数a和b,如果a>b则返回数字1,如果a<b则返回-1,如果a=b则返回0。方法A一般由函数来实现,测试工具分析方法A对应的函数,自动解析方法A需要两个整型的输入参数,需要一个整型的预期输出参数,该测试工具自动生成包含三个输入框的界面,测试人员可以在两个整型输入框中填入a=5,b=4,在预期输出框中写入1,点击用例生成按钮,就生成了一个测试用例中的一个输入和预期输出,测试人员根据需要重复上述操作,即可以生成针对待测试方法的一组输入和预期输出,即生成针对待测试方法的测试用例。

场景二、测试人员通过一个纯界面操作的测试工具进行单元测试,该界面包括用于选择待测方法的选择列表,该选择列表中包括多个待测方法,测试人员通过该选择列表选中一个被测方法后,本测试工具自动解析方法的输入参数、输出参数,生成多个输入框。测试人员只要按照要求填写固定的输入输出,点击用例生成按钮,就可以生成一个单元测试用例。

可以理解的是,对于场景一和场景二而言,该测试工具的界面可以是包括输入框的对话框,也可以是包含输入提示的命令行界面,但本发明不限于此。对于场景二而言,相应的选择列表可以包括但不限于下拉列表、下接菜单、以及表格列表等。

示例性方法

下面结合图场景一和二来描述根据本发明示例性实施方式的用于单元测试的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

图1示意性示出根据本发明实施方式的用于单元测试的方法的流程图。该方法可应用于前面描述的应用场景并在计算机中执行,但该方法的应用场景不限于此。此处所称计算机,可以是电脑、手机、平板电脑或其他计算机装置,本发明对此没有限制。

如图1所示,在步骤S110中,解析被测单元的信息得到输入参数和输出参数。

单元测试,是指对软件中的最小可测试单元进行检查和验证。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。一般来说,所述最小可测试单元要根据实际情况去判定其具体含义,需要说明的是,本实施例所述的被测单元是指计算机程序里的方法。

例如对于上述场景一中的方法A,自动对方法A进行解析,得到A包括两个整型输入参数a和b、以及一个整型输出参数。

在步骤S120中,根据所述输入参数和所述输出参数生成输入界面。

例如根据所述输入参数和所述输出参数在所述输入界面分别生成输入框。如上述场景一中根据方法A包含两个输入参数a和b、以及一个输出参数,自动生成包含三个输入框的界面,分别用于接受用户输入的测试用例的参数a和b的赋值以及输出值的期望值。

需要说明的是,该测试工具的界面不仅限于包括输入框的对话框,还可以是包含输入提示的命令行界面等其他形式,但本发明不限于此。

在步骤S130中,通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值。

在步骤S140中,根据所述测试值和所述期望输出值生成单元测试用例。

例如测试人员在所述输入界面的两个整型输入中填入a=5,b=4,预期输出中填入1,通过所述输入界面接收上述数据后,即可生成一个用于对方法A进行单元测试的测试用例中的一个输入和预期输出。

测试用例包括针对被测对象的一组输入值以及预期输出值,本实施例测试用例的具体记载形式在此不作限定,例如通过XML配置文件记载。

根据一些实施例,在生成单元测试用例之后,还可根据所述单元测试用例生成单元测试代码。

图2示意性示出根据本发明实施方式的用于单元测试的方法的流程图。

如图2所示,在步骤S210中,解析被测单元的信息得到输入参数和输出参数。

在步骤S220中,根据所述输入参数和所述输出参数生成输入界面。

在步骤S230中,通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值。

上述步骤S210至S230与实施例中相应的步骤实质相同,本实施例对此不作限定。

在步骤S240中,根据所述测试值和所述期望输出值生成XML配置文件。

XML是一个结构化的文本,可以有多级结构,每一个层级可以有自己的自定义属性。XML配置文件,属于一个存储工具,将单元测试用例按照规范的格式存储起来,一个测试用例集合可以使用一个XML配置文件存储。通过XML的一级结构代表包含了至少一个待测试对象的的待测对象集合,可在属性中存储着这个待测对象集合的属性信息、例如这个待测对象集合中待测对象的用途等信息。将XML的二级结构分为两部分,一部分用于存储上述待测对象集合中各个待测对象所对应的目标代码信息,另一部分用于存储上述待测对象集合中各个待测对象所对应的具体的用例信息。目标代码信息用于存储需要测试的代码具体位置、输入类型、以及输出类型等信息,这些信息从用例生成工具中的待测试方法信息中获取。具体的用例信息存储在XML的三级结构中,每一个三级结构对应一组输入、输出、验证方式,即每一个二级结构所对应的多个三级结构,存储了该二级结构所对应的待测对象的测试用例。

同样取上述场景一中的比较大小的方法A为例,这个三级结构的数据输入为a=5,b=4,预期输出为1,验证方式为数值相等比较。验证方式可以预先设定几种类型,例如:数值相等、字符串相等、数值范围、字符串范围等。可以将这个用例用如图4所示的XML文档表示。

在步骤S250中,根据所述XML配置文件生成单元测试代码。

本步骤用于通过对XML配置文件进行翻译得到单元测试代码。由于XML配置文件中已经包含了一个单元测试的所有必须元素,因此根据所述XML配置文件生成单元测试代码是可行的。

传统测试直接维护的就是这个本步骤得到的单元测试代码。在本实施例中,单元测试代码是根据XML配置文件通过一定的规范自动生成,可以让测试人员花更多精力在单元测试的用例设计上,而不是去处理复杂的代码逻辑。

根据一些实施例,在生成单元测试代码之后还可将所述单元测试代码托管到自动化平台。

例如,根据所述单元测试用例生成单元测试代码之后,可将所生成的单元测试代码托管到自动化平台中,可以设置定期执行,这样就可以异步监控提交的单元测试代码是否符合要求,而避免人为主动地执行单测代码。

需要说明的是,在步骤S210之前还可创建用于选择所述被测单元的界面。例如创建包括用于选择被测单元的列表,以供测试人员通过该列表选择将要测试的被测单元。相应地,所述列表的具体形式本实施例对此不作限定,可以包括但不限于下拉列表、下接菜单、以及表格列表等。

需要说明的是,本实施例中,上述步骤可通过模块化的工具具体实施。图3示意性地示出了根据本发明一实施方式的实现逻辑示意图,如图3所示,本实施例所述的用于单元测试的方法包括通过单元测试用例生成工具生成XML配置文件、通过单元测试代码生成工具对XML配置文件进行解析,将XML配置文件翻译成单元测试代码、以及将得到的单元测试代码托管到自动化平台设置定期执行,以异步监控提交的单元测试代码是否符合要求。

其中图3所示的单元测试用例生成工具是一个纯界面操作的工具,可以利用这个界面来新建待测试方法的一组输入和预期输出。例如要新建一个测试用例,首先从列表中选择待测试的方法信息,待测试的方法信息需要提前维护。选择后,会自动解析方法的输入参数、输出参数,生成多个输入框。测试人员只要按要求填写固定的输入输出,点击生成,就可以生成一个测试用例中的一个输入和预期输出,测试人员根据需要重复上述操作,即可以生成针对待测试方法的一组输入和预期输出,即生成针对待测试方法的测试用例。

图3所示的单元测试代码生成工具是用来解析XML配置文件,根据XML配置文件生成一个单元测试代码。比如要测试一个方法A,这个方法A的作用是比较输入的两个参数a和b,如果a>b则返回数字1,如果a<b则返回-1,如果a=b则返回0。利用这个单元测试代码生成工具,测试人员首先选择方法A,工具会自动解析需要两个整型的输入,需要一个整型的预期输出。测试人员可以在两个整型输入中填入a=5,b=4,预期输出中写入1,点击生成按钮,就生成了生成针对待测试方法的一组输入和预期输出,测试人员根据需要重复上述操作,即可以生成针对待测试方法的一组输入和预期输出,即生成针对待测试方法的测试用例。

图3所示的XML配置文件属于一个存储工具,将单元用例按照规范的格式存储起来。

图3所示的单元测试代码是由XML配置文件翻译的最终代码。

图3所示的自动化平台,可用于托管生成的单元测试代码,可以设置定期执行,这样就可以异步监控提交的代码是否符合要求,而不用人为主动去执行单测代码。

本领域普通技术人员应当知晓,测试本身应该注重输入输出,功能测试的重心应该在效果,而不是实现细节。相关单元测试技术中,代码与数据耦合,不利于维护,本实施例利用标准化的XML配置文件,将测试数据分组罗列,实现测试数据与代码进行严格分离。不仅如此,本实施例将单元测试中的测试代码,验证代码等也通过标准化配置文件进行格式化配置。使得单元测试变得统一,不用再重复的书写一样的代码。在此基础上,本实施例设计了一套操作界面和枚举定义,能够方便地通过界面操作,自动生成单元测试所需要的所有数据。不仅对测试人员的编程能力要求降到了最低,而且能让测试人员把更多精力放在用例的设计上。结合自动化运行平台,能够进行实时的检验和定期的代码验证。

示例性装置

在介绍了本发明示例性实施方式的方法之后,接下来,参考图5-6对本发明示例性实施方式的、用于单元测试的装置进行描述。

图5示意性示出本发明实施方式的用于单元测试的装置的框图。装置500可实现前面描述的相应方法。下面描述装置500,与前述方法对应的部分不再赘述。

如图5所示,装置500包括解析单元510、输入界面生成单元520、数据接收单元530、以及测试用例生成单元540。

解析单元510可用于解析被测单元的信息得到输入参数和输出参数。

输入界面生成单元520可用于根据所述输入参数和所述输出参数生成输入界面。

数据接收单元530可用于通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值。

测试用例生成单元540可用于根据所述测试值和所述期望输出值生成单元测试用例。

根据一些实施例,所述装置还可包括测试代码生成单元(图5中未示出),用于在生成单元测试用例之后,根据所述单元测试用例生成单元测试代码。

根据一些实施例,所述装置还可包括界面创建单元(图5中未示出),用于在解析被测单元的信息得到输入参数和输出参数之前还,创建用于选择所述被测单元的界面。

根据一些实施例,所述输入界面生成单元520配置为,根据所述输入参数和所述输出参数在所述输入界面分别生成输入框。

图6示意性示出本发明另一实施方式的用于单元测试的装置的框图。装置600可实现前面描述的相应方法。下面描述装置600,与前述方法对应的部分不再赘述。

如图6所示,装置600包括解析单元610、输入界面生成单元620、数据接收单元630、测试用例生成单元640、测试代码生成单元650、以及平台托管单元660。

解析单元610可用于解析被测单元的信息得到输入参数和输出参数。

输入界面生成单元620可用于根据所述输入参数和所述输出参数生成输入界面。

数据接收单元630可用于通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值。

测试用例生成单元640可用于根据所述测试值和所述期望输出值生成XML配置文件。

测试代码生成单元650可用于根据所述XML配置文件生成单元测试代码。

平台托管单元660可用于将所述单元测试代码托管到自动化平台。

根据一些实施例,所述装置还包括界面创建单元(图6中未示出),用于在解析被测单元的信息得到输入参数和输出参数之前,创建用于选择所述被测单元的界面。

根据一些实施例,所述输入界面生成单元620可用于根据所述输入参数和所述输出参数在所述输入界面分别生成输入框。

示例性设备

在介绍了本发明示例性实施方式的方法和装置之后,接下来,介绍根据本发明的另一示例性实施方式的用于单元测试的装置。

所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

在一些可能的实施方式中,根据本发明的用于单元测试的装置可以至少包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的用于单元测试的方法中的步骤。例如,所述处理单元可以执行如图1中所示的步骤S110,解析被测单元的信息得到输入参数和输出参数;步骤S120,根据所述输入参数和所述输出参数生成输入界面;步骤S130,通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值;步骤S140,根据所述测试值和所述期望输出值生成单元测试用例。

示例性程序产品

在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的用于单元测试的方法中的步骤,例如,所述终端设备可以执行如图1中所示的步骤S110,解析被测单元的信息得到输入参数和输出参数;步骤S120,根据所述输入参数和所述输出参数生成输入界面;步骤S130,通过所述输入界面接收所述输入参数的测试值和所述输出参数的期望输出值;步骤S140,根据所述测试值和所述期望输出值生成单元测试用例。

所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备。

应当注意,尽管在上文详细描述中提及了用于单元测试的装置的若干模块或单元,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或单元的特征和功能可以在一个模块或单元中具体化。反之,上文描述的一个模块或单元的特征和功能可以进一步划分为由多个模块或单元来具体化。

此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1