CN105760292A - 一种用于单元测试的断言验证方法和装置 - Google Patents

一种用于单元测试的断言验证方法和装置 Download PDF

Info

Publication number
CN105760292A
CN105760292A CN201410790687.3A CN201410790687A CN105760292A CN 105760292 A CN105760292 A CN 105760292A CN 201410790687 A CN201410790687 A CN 201410790687A CN 105760292 A CN105760292 A CN 105760292A
Authority
CN
China
Prior art keywords
return value
tested program
value
assertion verification
standard
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
Application number
CN201410790687.3A
Other languages
English (en)
Other versions
CN105760292B (zh
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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201410790687.3A priority Critical patent/CN105760292B/zh
Publication of CN105760292A publication Critical patent/CN105760292A/zh
Application granted granted Critical
Publication of CN105760292B publication Critical patent/CN105760292B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种用于单元测试的断言验证方法和装置。其中,所述用于单元测试的断言验证方法包括:接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求;根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值;根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。采用本申请的方法,通过预先存储对应特定被测程序和特定参数值的标准返回值,在单元测试时,根据被测程序的实际返回值和预存标准返回值,能够在单元测试程序中自动进行断言验证,避免手工编写断言程序语句,从而达到减少程序员工作量的效果。

Description

一种用于单元测试的断言验证方法和装置
技术领域
本申请涉及软件测试技术领域,具体涉及一种用于单元测试的断言验证方法和装置。
背景技术
与系统测试、集成测试不同,单元测试是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类或类方法,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
单元测试通常包括断言验证,即:对被测代码的返回值进行验证,从而判定被测代码是否正确。所谓断言,是指编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。使用断言可以创建更稳定、品质更好且不易于出错的代码,使用断言使我们向按契约式设计更近了一步。
目前业内常见的单元测试中的断言方式为利用xunit工具(如junit),以编码的方式来对被测代码的返回值进行断言。它支持简单类型的返回值,也支持复杂类型的返回值。采用这种断言方法,如果被测程序的返回值比较复杂,则需要编写大量的断言代码,例如:返回值为对象,此时需要程序员人工实现对比函数,因此程序员的工作量较大。并且,对于复杂类型的返回值,如果要做到完整的断言,断言代码的数量可能会占到单元测试代码的一半以上。
在互联网行业中,业务逻辑的变化是极为频繁的,而业务的变更可能导致程序返回值发生变化。因此,花费很多时间编写的单元测试中的断言也需要重新编写。基于这种情况,特别是当需要加快项目进度时,程序员经常选择不写断言,而直接把返回值打印出来,从而失去了单元测试的作用。严重地,将导致程序缺陷被遗漏。目前,上述这种不写断言、直接打印返回值的情况非常常见。在一个大型软件中,甚至有上千个单元测试用例都是没有断言的,这样的单元测试用例其实并不能发现程序缺陷。此外,大部分的单元测试都没有做到完整的断言,这样的单元测试很有可能导致部分程序缺陷无法被检测出来。
因此,当程序员编写单元测试代码时,现有技术存在无法自动进行断言验证的问题。
发明内容
本申请提供一种用于单元测试的断言验证方法和装置,以解决现有技术单元测试时存在无法自动进行断言验证的问题。
本申请提供一种用于单元测试的断言验证方法,包括:
接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求;
根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值;
根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
可选的,所述标准返回值采用如下步骤生成:
接收所述单元测试程序发送的对应所述被测程序和所述特定参数值的生成标准返回值请求;
根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值,作为标准返回值;
根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
根据所述标准返回值的标识符,存储序列化后的标准返回值。
可选的,在所述根据所述标准返回值的标识符,存储序列化后的标准返回值之前,还包括:
将所述标准返回值序列化。
可选的,所述根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证,包括:
根据所述被测程序的名称和所述特定参数值,获取所述标准返回值;
根据所述被测程序的返回值和标准返回值,进行断言验证。
可选的,在根据所述被测程序的返回值和标准返回值,进行断言验证之前,还包括:
反序列化所述标准返回值。
可选的,所述根据所述被测程序的名称和所述特定参数值,获取所述标准返回值,包括:
根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
根据所述标准返回值的标识符,获取所述标准返回值。
可选的,所述根据所述被测程序的返回值和标准返回值,进行断言验证,具体是指:
遍历所述被测程序的返回值中的各个属性,判断所述属性与所述标准返回值中的对应属性是否一致;若否,则抛出断言验证异常。
可选的,所述根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符,具体是指:
根据所述被测程序的名称和所述特定参数值,采用哈希算法,生成所述标准返回值的标识符。
本申请还提供一种用于单元测试的断言验证装置,包括:
请求接收单元,用于接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求;
执行获取单元,用于根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值;
断言验证单元,用于根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
可选的,所述装置还包括:
标准返回值生成单元,用于获取并存储所述被测程序和特定参数值的预存标准返回值;
所述标准返回值生成单元包括:
请求接收子单元,用于接收所述单元测试程序发送的对应所述被测程序和所述特定参数值的生成标准返回值请求;
执行获取子单元,用于根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值,作为标准返回值;
标识符生成子单元,用于根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
存储子单元,用于根据所述标准返回值的标识符,存储序列化后的标准返回值。
可选的,所述标准返回值生成单元还包括:
序列化子单元,用于将所述标准返回值序列化。
可选的,所述断言验证单元包括:
标准值获取子单元,用于根据所述被测程序的名称和所述特定参数值,获取所述标准返回值;
断言验证子单元,用于根据所述被测程序的返回值和标准返回值,进行断言验证。
可选的,所述标准值获取子单元包括:
标识符生成子单元,用于根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
标准返回值获取子单元,用于根据所述标准返回值的标识符,获取所述标准返回值。
可选的,所述断言验证单元还包括:
反序列化子单元,用于反序列化所述标准返回值。
与现有技术相比,本申请具有以下优点:
本申请提供的用于单元测试的断言验证方法和装置,通过预先存储对应特定被测程序和特定参数值的标准返回值,在单元测试时,根据被测程序的实际返回值和预存标准返回值,能够在单元测试程序中自动进行断言验证,避免手工编写断言程序语句,从而达到减少程序员工作量的效果。
附图说明
图1是本申请的用于单元测试的断言验证方法实施例的流程图;
图2是本申请的用于单元测试的断言验证方法实施例生成标准返回值的具体流程图;
图3是本申请的用于单元测试的断言验证方法实施例步骤S105的具体流程图;
图4是本申请的用于单元测试的断言验证装置实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。
在本申请中,提供了一种用于单元测试的断言方法和装置。在下面的实施例中逐一进行详细说明。
请参考图1,其为本申请的用于单元测试的断言验证方法实施例的流程图。所述方法包括如下步骤:
步骤S101:接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求。
本申请提供的用于单元测试的断言验证方法,通过根据以特定参数值执行某被测程序后获取的返回值、和以相同的特定参数值执行同一被测程序后获取的预存的标准返回值,进行单元测试中的自动断言验证处理。
本申请所述的单元测试程序是指对软件中的最小可测试单元进行检查和验证的测试程序。因此,本申请所述的被测程序是软件中的最小可测试单元。以JAVA语言开发的程序为例,方法、函数等为最小可测试单元。
例如:publicCompanyBasicfindCompanyBasicByVaccountId(intvaccountId)是一个方法,该方法的方法名为findCompanyBasicByVaccountId,形参为vaccountId,作用是根据参数vaccountId的值从数据库中取出基础数据,然后按一定的逻辑组装成CompanyBasic类的一个对象后,再返回CompanyBasic对象。因此,可以将findCompanyBasicByVaccountId作为被测程序,对其进行单元测试。为了保证findCompanyBasicByVaccountId方法的组装逻辑正确,需要其进行单元测试。采用传统的方法,用junit框架的单元测试编写的单元测试程序如下所示:
可见,传统的单元测试程序中包括了大量的断言语句,因此,程序员的工作量是较大的,而且容易出现编码错误。
本申请所述的特定参数值,是指调用被测程序时传入的实参。实参全称为“实际参数”,是在调用时传递给函数的参数,即传递给被调用函数的值。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。根据被测程序实现的功能,被测程序可以有多个形参。
要实施本申请提供的方法,首先要接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求。来自单元测试程序的断言验证验证请求中可能包含被测程序的名称、各个特定参数值、以及请求进行断言验证的相关信息,实施本申请所提供方法的断言验证装置收到该请求后,就可以继续执行步骤S103,发起根据预存的标准返回值进行断言验证的操作。在具体实施过程中,可以采取一些策略判断是否需要发起自动断言验证过程,例如:可以根据接收到的请求中是否携带要求进行自动断言验证的明确指示判断是否需要进行自动断言验证,如果需要,则继续执行步骤S103。
步骤S103:根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值。
实施本申请所提供方法的断言验证装置收到断言验证请求后,以断言验证请求中包括的各个特定参数值作为被测程序的实参,执行被测程序,被测程序执行完毕后,向断言验证装置返回执行结果。例如:步骤S101中示例方法的返回结果为CompanyBasic对象。
本申请所述的被测程序的返回值,可以是基本类型的返回值,例如:布尔型、字符型、字节或整型等,也可以是扩展类型的返回值,即:返回值是一个对象。
类和对象是面向对象编程技术中的最基本的概念。类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的变量,即:类的一个实例对象。
例如:测试上述示例方法,vaccountId的值为1,该方法的返回值CompanyBasic对象是扩展类型的返回值,具体为:
上述结果表示了返回值CompanyBasic对象的各个属性名及其属性值。
实施本申请所提供方法的断言验证装置收到被测程序的返回值后,就可以继续执行步骤S105,根据预存的标准返回值和本步骤获取的返回值,进行断言验证的操作。
步骤S105:根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
本申请提供的用于单元测试的断言验证方法,是基于这样一种总体构思,即:采用自动化的方法,预先自动获取并存储对应特定被测程序和特定参数值的返回值,将其作为断言验证处理时的标准比较值,在本申请中将其统称为“标准返回值”。由于标准返回值是通过程序自动获取的,因此在进行断言验证处理时,能够避免人工编写断言验证语句导致的容易出错的问题,达到减少工作量的效果。
本申请所述的预存标准返回值,是指进行断言验证操作的基准数据值。预存标准返回值可以存储在断言验证装置能够获取的任何设备中,设备既可以是服务器,也可以是开发人员的客户端设备。在具体实施过程中,可以采取配置参数的方式指定标准返回值的存储位置,例如:可以在断言验证装置中设置一个存储位置选项。
为了根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证,首先要生成与被测程序和特定参数值对应的标准返回值。请参考图2,其为本申请的用于单元测试的断言验证方法实施例生成标准返回值的具体流程图。在本实施例中,生成标准返回值包括如下步骤:
步骤S201:接收所述单元测试程序发送的对应所述被测程序和所述特定参数值的生成标准返回值请求。
要生成标准返回值,首先要接收单元测试程序发送的对应特定被测程序和特定参数值的生成标准返回值请求。来自单元测试程序的生成标准返回值验证请求与步骤S101中的断言验证请求一致,可能包含被测程序的名称、各个特定参数值、以及请求进行断言验证的相关信息,实施本申请所提供方法的断言验证装置收到该请求后,就可以继续执行步骤S202,发起生成标准返回值的操作。在具体实施过程中,生成标准返回值验证请求与断言验证请求可以为同一个请求,断言验证装置可以采取一些策略判断需要发起自动断言验证过程、或者生成标准返回值的过程,例如:可以根据接收到的请求中携带的要求进行自动断言验证或者生成标准返回值的明确指示,判断需要进行自动断言验证、或者生成标准返回值的过程,如果需要生成标准返回值,则继续执行步骤S202。
步骤S202:根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值,作为标准返回值。
步骤S202与步骤S103处理过程基本相同,只是针对不同的请求进行获取被测程序的返回值的操作,因此不再赘述,请参见步骤S103中的相应说明。
步骤S203:根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符。
为获取对应特定被测程序和特定参数值的标准返回值,需要为该值分配一个唯一的标识符。进行单元测试时的返回值、与标准返回值的共同点在于,二者是针对同一被测程序和相同的特定参数值的返回结果。因此,可以根据被测程序的名称和特定参数值,综合取一个特征值,唯一标识本次调用,作为标准返回值的标识符。
哈希算法可以将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。典型的哈希算法包括MD2、MD4、MD5和SHA-1。
基于哈希算法的上述特点,在本实施例中,根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符,具体是指:根据所述被测程序的名称和所述特定参数值,采用哈希算法,生成所述标准返回值的标识符。标识符的具体生成过程为:1)将所述被测程序的名称和所述特定参数值合并,并将合并后的值转换为二进制值;2)采用具体的哈希算法,将二进制值转换为较短的固定长度的二进制值。采用哈希算法,将被测程序的名称和特定参数值转换为哈希值,能够加快检索标准返回值的速度。
步骤S204:根据所述标准返回值的标识符,存储标准返回值。
通过标准返回值的标识符,唯一标识被测程序在特定参数值时的返回值。将标识符作为索引,存储被测程序的返回值。在具体实施过程中,可以将标准返回值保存到一个文件中或者数据库中。
在面向对象的编程方法中,方法或函数的返回值可以是扩展类型的返回值,例如:实例化的类,即对象。为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来,需要采用保存机制以保存对象的状态,即:以某种存储形式使对象持久化。本申请提供的用于单元测试的断言验证方法,是将标准返回值保存到一个文件中或者数据库中。因此,当返回值的类型为扩展类型时,要实施本申请提供的方法,需要采用一定的保存对象机制以保存标准返回值对象的状态。
本实施例的被测程序是JAVA类的一个方法,JAVA提供了一种保存对象的标准机制,即:序列化。序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取并反序列化对象的状态,重新创建该对象。序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态。
在本实施例中,在根据所述标准返回值的标识符,存储标准返回值之前,还包括:将所述标准返回值序列化。
存储在文件中或者数据库中的标准返回值是一段文本,既可以是普通格式的文本,也可以为JSON格式或者XML格式的文本。优选的文本格式为JSON数据交换格式。JSON是一种轻量级的数据交换格式。它是基于JavaScript(StandardECMA-2623rdEdition-December1999)的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。在本实施例中,标准返回值是JSON数据交换格式的文本数据,存储在服务器中。
生成对应特定被测程序和特定参数值的预存标准返回值之后,当接收到单元测试程序发送的对应该特定被测程序和该特定参数值的断言验证请求时,就可以执行本步骤S105的操作,根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
请参考图3,其为本申请的用于单元测试的断言验证方法实施例步骤S105的具体流程图。在本实施例中,所述根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证,包括:
步骤S1051:根据所述被测程序的名称和所述参数,获取所述标准返回值。
为了根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证,首先要获取与本次测试相同参数值的已存的标准返回值。由于单元测试的被测程序名称和参数值、与生成标准返回值的被测程序名称和参数值完全相同,因此根据单元测试的被测程序名称和参数值,就能够获取已存的标准返回值。
在本实施例中,所述根据所述被测程序的名称和所述特定参数值,获取所述标准返回值,包括:根据所述被测程序的名称和所述参数,生成所述标准返回值的标识符;根据所述标准返回值的标识符,获取所述标准返回值。在获取标准返回值之后,就可以执行下一步的操作,进行具体的断言验证处理。
步骤S1052:根据所述被测程序的返回值和标准返回值,进行断言验证。
与存储标准返回值时采用的保存对象机制相对应,如果返回值的类型为扩展类型,则在读取已存的标准返回值之后,需要采用相反的机制,把保存的对象状态再读出来。然后再将所述被测程序的返回值对象和标准返回值对象,进行比较判断,完成断言验证处理。
在本实施例中,采用JAVA提供的序列化机制存储标准返回值,与之相对应,采用反序列化机制从序列化的表示形式中提取数据,并直接设置对象状态,将其还原为一个对象,以便进行具体的断言验证处理。在本实施例中,在根据所述被测程序的返回值和标准返回值,进行断言验证之前,还包括:反序列化所述标准返回值。
在本实施例中,被测程序的返回值是一个对象,标准返回值也是一个对象,所述根据所述被测程序的返回值和反序列化后的标准返回值,进行断言验证,具体是指:遍历所述被测程序的返回值中的各个属性,判断所述属性与所述标准返回值中的对应属性是否一致;若否,则抛出断言验证异常。例如:步骤S103中被测方法findCompanyBasicByVaccountId的vaccountId参数的值为1,实际测试该方法的返回值CompanyBasic对象和在相同参数下执行该方法返回的标准返回值对比如表1所示:
标准返回值 实际测试时的返回值
1 { {
2 “type”:“CompanyBasic”, “type”:“CompanyBasic”,
3 “bizType”:“bizType”, “bizType”:“bizType”,
4 “companyDetail1”:“companyDetail1”, “companyDetail1”:“companyDetail1”,
5 “companyName”:“nulltest”, “companyName”:“nulltest”,
6 “emplyeesCount”:2, “emplyeesCount”:2,
7 “establishedYear”:1, “establishedYear”:1,
8 “homepageUrl”:“url”, “homepageUrl”:“url2”,
9 “logoFile”:“logoFile”,
10 “ownershipType”:98, “ownershipType”:98,
11 “principal”:“principal”, “principal”:“principal”,
12 “redAddress”:“address”, “redAddress”:“address”,
13 “status”:“PASS”, “status”:“PASS”,
14 “valueSource”:“valueSource”, “valueSource”:“valueSource”,
15 } }
表1、实际测试时的返回值和标准返回值的对比
根据这两个对象进行断言验证处理的具体过程为:将实际测试时的返回值和标准返回值中的每一个属性进行一一对比,如果发现两个属性值不一致,则抛出断言验证异常。在具体实施中,还可以包括检查属性是否缺失、属性是否发生变更以及属性是否为新增等情况,这些具体的变化,都会抛出断言验证异常,起到向开发人员预警的作用。例如:标准返回值中存在LogoFile属性,而实际测试时的返回值中没有该属性,单元测试程序将抛出属性缺失异常。
在进行单元测试过程中,被测程序可能出现错误导致抛出异常。因此,除了上述被测程序正常运行时的普通返回值外,被测程序的返回值还包括异常。异常是一个对象,与错误不同的是,异常是程序本身可以处理的。程序可以根据捕获到的具体异常,进行相应的后续处理。
异常分为运行时异常和非运行时异常,这两种异常有很大的区别,也称之为不检查异常和检查异常。运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。基于上述不同种类异常的特点,本申请提供的用于单元测试的断言验证方法,可以对程序抛出的运行时异常进行断言验证。
为了能够对程序抛出的运行时异常进行断言验证,首先需要生成并存储被测程序在相同的参数值情况下抛出的异常,将其作为标准异常,然后当测试该程序时,将被测程序抛出的异常和对应所述参数的所述被测程序抛出的预存标准异常,进行断言验证。在本实施例中,根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证,具体是指:根据所述被测程序抛出的异常和对应所述特定参数值的所述被测程序抛出的预存标准异常,进行断言验证。
对程序抛出的异常进行断言验证、与对程序正常执行后的返回值进行断言验证的方法是一致的,均为首先生成被测程序的标准返回值或者标准异常,然后将标准返回值与实际测试时的返回值进行对比,完成单元测试中的断言验证处理。对于标准异常的生成、存储以及获取方式,与对于标准返回值的处理方式一致,二者内容相同的部分不再赘述,请参见标准返回值处理中的相应部分。
在上述的实施例中,提供了一种用于单元测试的断言验证方法,与之相对应的,本申请还提供一种用于单元测试的断言验证装置。请参看图5,其为本申请的用于单元测试的断言验证装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种用于单元测试的断言验证装置,包括:请求接收单元101,用于接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求;执行获取单元102,用于根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值;断言验证单元103,用于根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
可选的,所述装置还包括:
标准返回值生成单元,用于获取并存储所述被测程序和特定参数值的预存标准返回值;
所述标准返回值生成单元包括:
请求接收子单元,用于接收所述单元测试程序发送的对应所述被测程序和所述特定参数值的生成标准返回值请求;
执行获取子单元,用于根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值,作为标准返回值;
标识符生成子单元,用于根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
存储子单元,用于根据所述标准返回值的标识符,存储序列化后的标准返回值。
可选的,所述标准返回值生成单元还包括:
序列化子单元,用于将所述标准返回值序列化。
可选的,所述断言验证单元103包括:
标准值获取子单元,用于根据所述被测程序的名称和所述特定参数值,获取所述标准返回值;
断言验证子单元,用于根据所述被测程序的返回值和标准返回值,进行断言验证。
可选的,所述标准值获取子单元包括:
标识符生成子单元,用于根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
标准返回值获取子单元,用于根据所述标准返回值的标识符,获取所述标准返回值。
可选的,所述断言验证单元103还包括:
反序列化子单元,用于反序列化所述标准返回值。
本申请提供的用于单元测试的断言验证方法和装置,通过预先存储对应特定被测程序和特定参数值的标准返回值,在单元测试时,根据被测程序的实际返回值和预存标准返回值,能够在单元测试程序中自动进行断言验证验证,避免手工编写断言验证程序语句,从而达到减少程序员工作量的效果。
本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (14)

1.一种用于单元测试的断言验证方法,其特征在于,包括:
接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求;
根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值;
根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
2.根据权利要求1所述的用于单元测试的断言验证方法,其特征在于,所述标准返回值采用如下步骤生成:
接收所述单元测试程序发送的对应所述被测程序和所述特定参数值的生成标准返回值请求;
根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值,作为标准返回值;
根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
根据所述标准返回值的标识符,存储序列化后的标准返回值。
3.根据权利要求2所述的用于单元测试的断言验证方法,其特征在于,在所述根据所述标准返回值的标识符,存储序列化后的标准返回值之前,还包括:
将所述标准返回值序列化。
4.根据权利要求1所述的用于单元测试的断言验证方法,其特征在于,所述根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证,包括:
根据所述被测程序的名称和所述特定参数值,获取所述标准返回值;
根据所述被测程序的返回值和标准返回值,进行断言验证。
5.根据权利要求4所述的用于单元测试的断言验证方法,其特征在于,在根据所述被测程序的返回值和标准返回值,进行断言验证之前,还包括:
反序列化所述标准返回值。
6.根据权利要求4所述的用于单元测试的断言验证方法,其特征在于,所述根据所述被测程序的名称和所述特定参数值,获取所述标准返回值,包括:
根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
根据所述标准返回值的标识符,获取所述标准返回值。
7.根据权利要求4所述的用于单元测试的断言验证方法,其特征在于,所述根据所述被测程序的返回值和标准返回值,进行断言验证,具体是指:
遍历所述被测程序的返回值中的各个属性,判断所述属性与所述标准返回值中的对应属性是否一致;若否,则抛出断言验证异常。
8.根据权利要求2或6所述的用于单元测试的断言验证方法,其特征在于,所述根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符,具体是指:
根据所述被测程序的名称和所述特定参数值,采用哈希算法,生成所述标准返回值的标识符。
9.一种用于单元测试的断言验证装置,其特征在于,包括:
请求接收单元,用于接收单元测试程序发送的对应特定被测程序和特定参数值的断言验证请求;
执行获取单元,用于根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值;
断言验证单元,用于根据所述被测程序的返回值和对应所述被测程序和特定参数值的预存标准返回值,进行断言验证。
10.根据权利要求9所述的用于单元测试的断言验证装置,其特征在于,所述装置还包括:
标准返回值生成单元,用于获取并存储所述被测程序和特定参数值的预存标准返回值;
所述标准返回值生成单元包括:
请求接收子单元,用于接收所述单元测试程序发送的对应所述被测程序和所述特定参数值的生成标准返回值请求;
执行获取子单元,用于根据所述特定参数值,执行所述被测程序,获取所述被测程序的返回值,作为标准返回值;
标识符生成子单元,用于根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
存储子单元,用于根据所述标准返回值的标识符,存储序列化后的标准返回值。
11.根据权利要求10所述的用于单元测试的断言验证装置,其特征在于,所述标准返回值生成单元还包括:
序列化子单元,用于将所述标准返回值序列化。
12.根据权利要求9所述的用于单元测试的断言验证装置,其特征在于,所述断言验证单元包括:
标准值获取子单元,用于根据所述被测程序的名称和所述特定参数值,获取所述标准返回值;
断言验证子单元,用于根据所述被测程序的返回值和标准返回值,进行断言验证。
13.根据权利要求12所述的用于单元测试的断言验证装置,其特征在于,所述标准值获取子单元包括:
标识符生成子单元,用于根据所述被测程序的名称和所述特定参数值,生成所述标准返回值的标识符;
标准返回值获取子单元,用于根据所述标准返回值的标识符,获取所述标准返回值。
14.根据权利要求9所述的用于单元测试的断言验证装置,其特征在于,所述断言验证单元还包括:
反序列化子单元,用于反序列化所述标准返回值。
CN201410790687.3A 2014-12-18 2014-12-18 一种用于单元测试的断言验证方法和装置 Expired - Fee Related CN105760292B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410790687.3A CN105760292B (zh) 2014-12-18 2014-12-18 一种用于单元测试的断言验证方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410790687.3A CN105760292B (zh) 2014-12-18 2014-12-18 一种用于单元测试的断言验证方法和装置

Publications (2)

Publication Number Publication Date
CN105760292A true CN105760292A (zh) 2016-07-13
CN105760292B CN105760292B (zh) 2019-01-08

Family

ID=56340350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410790687.3A Expired - Fee Related CN105760292B (zh) 2014-12-18 2014-12-18 一种用于单元测试的断言验证方法和装置

Country Status (1)

Country Link
CN (1) CN105760292B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598852A (zh) * 2016-12-05 2017-04-26 广州唯品会信息科技有限公司 软件测试方法及系统
CN106776324A (zh) * 2016-12-19 2017-05-31 广州酷狗计算机科技有限公司 接口测试方法及装置
CN107402883A (zh) * 2017-07-27 2017-11-28 腾讯科技(深圳)有限公司 一种数据测试处理方法和装置
CN108270546A (zh) * 2016-12-30 2018-07-10 北京酷我科技有限公司 一种信息传输的方法及系统
CN108536583A (zh) * 2018-03-09 2018-09-14 平安科技(深圳)有限公司 自动化测试的断言方法、装置、计算机设备及存储介质
WO2019062067A1 (zh) * 2017-09-27 2019-04-04 武汉斗鱼网络科技有限公司 用户界面单元测试方法、装置、可读存储介质及设备
CN110308387A (zh) * 2019-07-01 2019-10-08 成都奥卡思微电科技有限公司 一种形式验证断言空泛性的测试和自动纠正方法、存储介质和终端
CN111008147A (zh) * 2019-12-20 2020-04-14 广州品唯软件有限公司 应用程序的测试方法、终端及计算机可读存储介质
CN112286784A (zh) * 2019-07-23 2021-01-29 腾讯科技(深圳)有限公司 一种测试用例生成方法、装置、服务器及存储介质
CN113836045A (zh) * 2021-11-29 2021-12-24 深圳市明源云链互联网科技有限公司 接口自动化断言的逻辑生成方法、装置及存储介质
CN112286784B (zh) * 2019-07-23 2024-05-10 腾讯科技(深圳)有限公司 一种测试用例生成方法、装置、服务器及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060150157A1 (en) * 2005-01-06 2006-07-06 Fellenstein Craig W Verifying resource functionality before use by a grid job submitted to a grid environment
CN1908914A (zh) * 2005-08-01 2007-02-07 中兴通讯股份有限公司 一种数据库依赖软件单元的测试方法
CN1983209A (zh) * 2005-12-14 2007-06-20 中兴通讯股份有限公司 一种软件单元测试自动化系统及其方法
CN101714166A (zh) * 2009-10-30 2010-05-26 清华大学 一种大规模多关键词精确匹配算法的性能测试方法及系统
CN101847117A (zh) * 2009-03-23 2010-09-29 中兴通讯股份有限公司 一种单元测试方法和装置
CN103793326A (zh) * 2014-01-28 2014-05-14 福建星网锐捷网络有限公司 组件测试方法及装置
CN103942138A (zh) * 2013-01-23 2014-07-23 纽海信息技术(上海)有限公司 测试方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060150157A1 (en) * 2005-01-06 2006-07-06 Fellenstein Craig W Verifying resource functionality before use by a grid job submitted to a grid environment
CN1908914A (zh) * 2005-08-01 2007-02-07 中兴通讯股份有限公司 一种数据库依赖软件单元的测试方法
CN1983209A (zh) * 2005-12-14 2007-06-20 中兴通讯股份有限公司 一种软件单元测试自动化系统及其方法
CN101847117A (zh) * 2009-03-23 2010-09-29 中兴通讯股份有限公司 一种单元测试方法和装置
CN101714166A (zh) * 2009-10-30 2010-05-26 清华大学 一种大规模多关键词精确匹配算法的性能测试方法及系统
CN103942138A (zh) * 2013-01-23 2014-07-23 纽海信息技术(上海)有限公司 测试方法及装置
CN103793326A (zh) * 2014-01-28 2014-05-14 福建星网锐捷网络有限公司 组件测试方法及装置

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106598852A (zh) * 2016-12-05 2017-04-26 广州唯品会信息科技有限公司 软件测试方法及系统
CN106776324A (zh) * 2016-12-19 2017-05-31 广州酷狗计算机科技有限公司 接口测试方法及装置
CN108270546A (zh) * 2016-12-30 2018-07-10 北京酷我科技有限公司 一种信息传输的方法及系统
CN107402883A (zh) * 2017-07-27 2017-11-28 腾讯科技(深圳)有限公司 一种数据测试处理方法和装置
CN107657026B (zh) * 2017-09-27 2020-05-12 武汉斗鱼网络科技有限公司 用户界面单元测试方法、装置、可读存储介质及设备
WO2019062067A1 (zh) * 2017-09-27 2019-04-04 武汉斗鱼网络科技有限公司 用户界面单元测试方法、装置、可读存储介质及设备
CN108536583A (zh) * 2018-03-09 2018-09-14 平安科技(深圳)有限公司 自动化测试的断言方法、装置、计算机设备及存储介质
CN108536583B (zh) * 2018-03-09 2021-03-16 平安科技(深圳)有限公司 自动化测试的断言方法、装置、计算机设备及存储介质
CN110308387A (zh) * 2019-07-01 2019-10-08 成都奥卡思微电科技有限公司 一种形式验证断言空泛性的测试和自动纠正方法、存储介质和终端
CN110308387B (zh) * 2019-07-01 2021-03-23 成都奥卡思微电科技有限公司 一种形式验证断言空泛性的测试和自动纠正方法、存储介质和终端
CN112286784A (zh) * 2019-07-23 2021-01-29 腾讯科技(深圳)有限公司 一种测试用例生成方法、装置、服务器及存储介质
CN112286784B (zh) * 2019-07-23 2024-05-10 腾讯科技(深圳)有限公司 一种测试用例生成方法、装置、服务器及存储介质
CN111008147A (zh) * 2019-12-20 2020-04-14 广州品唯软件有限公司 应用程序的测试方法、终端及计算机可读存储介质
CN111008147B (zh) * 2019-12-20 2023-12-26 广州品唯软件有限公司 应用程序的测试方法、终端及计算机可读存储介质
CN113836045A (zh) * 2021-11-29 2021-12-24 深圳市明源云链互联网科技有限公司 接口自动化断言的逻辑生成方法、装置及存储介质

Also Published As

Publication number Publication date
CN105760292B (zh) 2019-01-08

Similar Documents

Publication Publication Date Title
CN105760292A (zh) 一种用于单元测试的断言验证方法和装置
CN107122368B (zh) 一种数据校验方法、装置及电子设备
US9026998B2 (en) Selecting relevant tests to quickly assess code stability
US8694966B2 (en) Identifying test cases to be run after changes to modules of a software application
US8151247B2 (en) Test data management
US9846633B2 (en) Generating tests for testing software applications
US8621441B2 (en) System and method for software immunization based on static and dynamic analysis
US8978009B2 (en) Discovering whether new code is covered by tests
US9959199B2 (en) Diagnosis of test failures in software programs
US9639453B2 (en) Method and system for determining functional tests to execute based on code coverage
US20180260312A1 (en) Test selection for application commit
CN108614702B (zh) 字节码优化方法及装置
US10209984B2 (en) Identifying a defect density
CN110287696A (zh) 一种反弹shell进程的检测方法、装置和设备
US20210103514A1 (en) Reusable test cases for identifiable patterns
CN110704297A (zh) 代码评审方法、装置、计算机设备及存储介质
US9195730B2 (en) Verifying correctness of a database system via extended access paths
US9842044B2 (en) Commit sensitive tests
JP2017174418A (ja) モデルチェックのためのデータ構造抽象化
CN111124870A (zh) 一种接口测试方法及装置
US20210026756A1 (en) Deriving software application dependency trees for white-box testing
US9436575B2 (en) Selective profiling of applications
US8554522B2 (en) Detection of design redundancy
Fornaia et al. Is my code easy to port? using taint analysis to evaluate and assist code portability
CN114490413A (zh) 测试数据的准备方法及装置、存储介质和电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190108

CF01 Termination of patent right due to non-payment of annual fee