CN105335281B - 一种自动mock外部依赖的方法及装置 - Google Patents
一种自动mock外部依赖的方法及装置 Download PDFInfo
- Publication number
- CN105335281B CN105335281B CN201410370258.0A CN201410370258A CN105335281B CN 105335281 B CN105335281 B CN 105335281B CN 201410370258 A CN201410370258 A CN 201410370258A CN 105335281 B CN105335281 B CN 105335281B
- Authority
- CN
- China
- Prior art keywords
- mock
- outside
- value
- call
- relied
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种自动mock外部依赖的方法及装置。通过使用录制机制,获取被测代码名称、调用参数和调用次数后生成mock特征值,同时获取外部依赖的返回值或返回对象并序列化为返回文本后,将mock特征值与返回文本对应,从而得到被测代码外部依赖的mock对象。由于所得到的mock对象是在真实环境上录制生成,因此更接近真实的外部依赖,且使用录制机制而非编码方式和配置方式来创建mock对象,减少了编写代码和配置的工作量,可以极大地提高测试效率,降低测试成本。
Description
技术领域
本发明涉及软件测试技术领域,尤其涉及一种自动mock外部依赖的方法及装置。
背景技术
程序测试是程序开发的重要一环。单元测试是程序测试中最低级别的测试活动,所述单元为程序测试中最小的被测功能块或者代码单元。在单元测试中,对需要调用外部依赖的程序模块进行测试时,由于外部依赖往往难以构造或获取,会导致单元测试无法进行,或者外部依赖不稳定,导致测试失败率高、排查成本大。为解决此类问题,通常采用mock(模拟)测试。所述mock测试指创建一个虚拟的对象来替代外部依赖进行测试,创建的虚拟对象称为mock对象。现阶段,mock测试有两种方式:
1、在测试代码中编写mock对象,例如Jmockit(帮助开发人员编写测试程序的一组工具和应用程序编程接口)。在测试代码中编写单元测试用例的时候,申明要mock的外部依赖对象,及对象的方法,由此创建的mock对象根据传入的参数,返回固定的值,因此在真正执行测试时,不需要调用真的外部依赖,而是调用创建的mock对象,从而隔离程序模块和外部依赖,避免外部依赖不稳定影响测试效果。
2、建立远程mock平台,单元测试时并不直接连接真正的外部依赖环境,而是连接到远程mock平台上,由平台提供mock库,同时测试员可以在平台上创建和编辑数据。远程mock平台可以提供mock对象的集中管理,避免因为外部依赖环境变更或数据变更导致单元测试失败。
发明人在实现本申请的过程中发现上述第1种方式和第2种方式都存在缺陷和问题:
上述第1种方式,虽然可以通过在代码中编写mock对象避免对外部依赖的直接调用,但存在以下两个问题:一是代码量多,过多的mock测试代码导致工作量增加,测试效率低,且使代码疏忽、出错的几率增加;二是完全采用代码的方式来编写mock对象,由于返回值由自己定义,可能定义的格式或者含义并非外部依赖的真实情况,使得mock对象不能真实地反映外部依赖。
上述第2种方式,也存在以下三个问题:一是通用性不够,该方式只能支持有远程接口的程序模块,不能适用于本地调用;二是配置工作量大,创建一个mock对象,需要配置入口参数、调用方式、返回值等,当需要配置的参数比较复杂时构造工作量将会很大,测试效率会很低,而且出错几率增加;三是真实性仍然较低,因为mock对象仍然主要由编写和配置产生,而且难以实现真实外部依赖所具有的动态返回:由于是远程访问方式,mock远程平台不能记录程序单元对mock对象的调用次数,因此其上的mock对象对同一个入口参数只能返回一个固定值,无法创建需要根据调用次数来动态返回不同值的mock对象,例如注册,一个用户名第一次注册时返回true(成功),表示注册成功,再次使用相同的用户名注册时,返回false(失败),表示用户名已注册,不能使用相同的用户名注册,但远程mock平台无法实现真实的注册。
发明内容
为克服相关技术中创建mock对象的效率和真实性低的问题,本申请提供一种自动mock外部依赖的方法及装置。
根据本申请实施例的第一方面,提供一种自动mock外部依赖的方法,包括:
获取被测代码的名称,以及获取所述被测代码调用外部依赖的调用参数和调用次数;
获取外部依赖对所述调用产生的返回值或者返回对象;
根据所述被测代码的名称、调用参数和调用次数生成mock特征值;
将所述外部依赖的返回值或者返回对象序列化为返回文本;
将所述mock特征值与所述返回文本对应,所述mock特征值和对应的所述返回文本构成mock对象。
可选的,所述获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数,包括:
拦截所述被测代码对外部依赖的调用;
记录被测代码的名称、调用参数和调用次数。
可选的,所述获取外部依赖对所述调用的返回值或者返回对象,包括:
根据所述调用参数和调用次数调用外部依赖;
记录外部依赖的返回值或者返回对象。
其中,根据被测代码的名称、调用参数和调用次数使用哈希算法生成mock特征值。
根据本申请实施例的第二方面,提供一种自动mock外部依赖的装置,包括:
被测端数据获取模块,用于获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数;
外部端数据获取模块,用于获取外部依赖对所述调用产生的返回值或者返回对象;
mock对象生成模块,用于根据被测代码的名称、调用参数和调用次数生成mock特征值,将所述外部依赖的返回值或者返回对象序列化为返回文本,且将所述mock特征值与所述返回文本对应,所述mock特征值和对应的返回文本构成mock对象;
存储模块,用于存储所述mock对象。
可选的,所述被测端数据获取模块,包括:
被测端拦截子模块,用于拦截被测代码对外部依赖的调用;
被测端记录子模块,用于记录被测代码的名称、调用参数和调用次数。
可选的,所述外部端数据获取模块,包括:
调用子模块,用于根据所述调用参数和调用次数调用外部依赖;
外部端记录子模块,用于记录外部依赖的返回值或者返回对象。
可选的,所述mock对象生成模块,包括:
mock特征值生成子模块,用于根据被测代码的名称、调用参数和调用次数生成mock特征值;
序列化子模块,用于将所述外部依赖的返回值或者返回对象序列化为返回文本;
构建子模块,用于将所述mock特征值与所述外部依赖的返回值或者返回对象对应,所述mock特征值和对应的所述外部依赖的返回值或者返回对象构成mock对象。
根据本申请实施例的第三方面,提供一种mock测试方法,包括:
拦截被测代码对外部依赖的调用;
获取被测代码的名称、调用参数和调用次数;
根据所述被测代码的名称、调用参数和调用次数生成调用特征值,且所述调用特征值的生成方法和mock对象中mock特征值的生成方法相同;
根据所述调用特征值在mock对象中查找对应的返回文本;
反序列化所述返回文本,得到外部依赖的返回值或者返回对象;
将所述返回值或者返回对象返回给被测代码;
验证所述返回值或者返回对象。
根据本申请实施例的第四方面,提供一种mock测试装置,包括:
调用拦截模块,用于拦截被测代码对外部依赖的调用;
数据获取模块,获取被测代码的名称、调用参数和调用次数;
调用特征值生成模块,用于根据所述被测代码的名称、调用参数和调用次数生成调用特征值,且所述调用特征值的生成方法和mock对象中mock特征值的生成方法相同;
查找模块,用于根据所述调用特征值在mock对象中查找对应的返回文本;
反序列化模块,用于反序列化所述返回文本,得到外部依赖的返回值或者返回对象;
返回模块,用于将所述返回值或者返回对象返回给被测代码;
验证模块,用于验证所述返回值或者返回对象。
本申请实施例提供的技术方案,使用录制机制,在被测代码调用外部依赖时,拦截该调用,记录被测代码的名称、调用参数和调用次数,根据被测代码的名称、调用参数和调用次数生成mock特征值,并替代被测代码调用外部依赖,同时拦截外部依赖的返回值或返回对象,将返回值或返回对象序列化为返回文本后,将mock特征值与返回文本对应,由此而得到被测代码外部依赖的mock对象。这个过程,相当于通过记录被测代码对应的外部依赖的入口参数和返回值或返回对象,以及入口参数和返回值或返回对象之间的对应关系,录制了外部依赖。使用mock特征值和返回值来表征mock对象,使mock对象形式更为简洁,在测试时以与mock特征值对应的调用特征值为索引,可以更快速地找到对应的返回值,实现mock测试。本申请实施例提供的自动mock外部对象的技术方案可以包括以下有益效果:
1、提高mock对象真实性:由于mock对象是在真实环境上录制生成,因此更接近真实的外部依赖;
2、提高测试效率:使用录制机制而非编码方式来创建mock对象,大大减少了编写代码的工作量,且使代码更精简和易于掌握,同时mock对象和相关数据全部通过录制生成,不依赖于格式规定,参数复杂时也可以快速得到mock对象,可以极大地提高测试效率,降低测试成本;
3、提高通用性:可以录制任何外部依赖,包括远程的和本地的外部依赖;
4、可以实现基于调用次数的动态返回:在录制mock对象过程中记录调用次数和每次调用的相关数据,所得到的mock对象中包含了各个调用次数对应的返回值,因此在测试时可以根据调用次数来获得动态返回值。
本申请实施例提供的mock测试的技术方案,基于上述自动mock外部依赖的技术方案,在测试时,以mock对象替代真正的外部依赖作为被测代码的调用对象,根据被测代码的名称、调用参数和调用次数生成调用特征值,根据与mock特征值对应且相等的调用特征值索引到mock对象中对应的返回文本,将返回文本反序列化为返回值或返回对象后,将返回值或返回对象返回至被测代码,验证所述返回值完成测试。本申请实施例提供的mock测试的技术方案,可以包括如下有益效果:测试代码简洁,且只需生成调用特征值、查找对应的返回文本,将返回文本反序列化便可以实施一次测试,测试效率高;且由于mock对象的真实性高,使测试能更符合实际情况,测试更准确。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一示例性实施例示出的一种自动mock外部依赖的方法的流程示意图。
图2为本申请一示例性实施例示出的一种自动mock外部依赖的装置的框图。
图3为本申请一示例性实施例示出的一种mock测试方法的流程示意图。
图4为本申请一示例性实施例示出的一种mock测试装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
为了全面理解本申请,在以下详细描述中提到了众多具体的细节,但是本领域技术人员应该理解,本申请可以无需这些具体细节而实现。在其他实施例中,不详细描述公知的方法、过程、组件和电路,以免不必要地导致实施例模糊。
在第一方面,本申请提供一种自动mock外部依赖的方法。图1为本申请一示例性实施例示出的一种自动mock外部依赖的方法的流程示意图。如图1所示,所述方法可以包括:
在步骤S101中,获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数。
其中,在一种可能的实施方式中,在单元测试过程中运行被测代码时,可以通过赋值的方式,获取被测代码的名称,以及被测代码调用外部依赖的调用参数和调用次数,例如,在单元测试过程中,被测代码调用外部依赖之前或者调用外部依赖的同时,将被测代码的名称和当前被测代码的参数设置赋值给其他变量,该变量即获取了返回值或者返回对象,所述参数设置包括调用参数和调用次数。
在一种优选的实施方式中,在单元测试过程中运行被测代码时,拦截被测代码对外部依赖的调用,所述拦截可以为常规的程序调用拦截方法,然后获取并记录被测代码的名称、调用参数和调用次数。获取调用参数包括获取调用参数的名称、值和类型。调用次数为第几次调用外部依赖,对于返回值依赖于调用次数的外部依赖,需要多次运行被测代码来获取不同次数时外部依赖的返回值或返回对象。被测代码的名称可以在被测代码第一次运行时获取后在以后的运行中保持,调用参数和调用次数在每次运行时获取。被测代码的名称用于将生成的mock对象和被测代码对应起来。
在步骤S102中,获取外部依赖对所述调用产生的返回值或者返回对象。
其中,在一种优选的方式中,当步骤S101中使用拦截的方式获取被测代码的名称、调用参数和调用次数时,在步骤S102中,可以先根据所述调用参数和调用次数调用外部依赖,取代被测代码对外部依赖的调用,通过将记录的当次的调用参数和调用次数作为入口参数输入至外部依赖,实现对外部依赖的调用。将记录的当次的调用参数和调用次数作为入口参数输入至外部依赖后,外部依赖会根据入口参数输出返回值或者返回对象。然后接收并记录外部依赖输出的返回值或者返回对象,也就是说返回值或者返回对象并不直接返回至被测代码,而是被拦截并记录了,记录之后可以将返回值或者返回对象传回至被测代码。
在另一种可能的实施方式中,可以通过赋值的方式获取外部依赖对被测代码调用产生的返回值或者返回对象,例如,在被测代码接收外部依赖的返回值或者返回对象时,将被测代码接收的返回值或者返回对象同时赋值给其他变量,该变量即获取了返回值或者返回对象。
使用拦截的方式获取被测代码的名称、调用参数和调用次数,可以将被测代码和外部依赖隔离,相比赋值的方式可以更稳定地得到相关的数据,因为使用赋值的方式时,需要在被测代码之中***额外的代码来进行赋值,影响被测代码本身的结构,运行出错几率高。
在步骤S103中,根据所述被测代码的名称、调用参数和调用次数生成mock特征值。
在步骤S104中,将所述外部依赖的返回值或者返回对象序列化为返回文本。
在步骤S105中,将所述mock特征值与所述返回文本对应,所述mock特征值和对应的所述返回文本构成mock对象。
其中,可以使用哈希算法根据被测代码的名称、调用参数和调用次数生成mock特征值。所述mock特征值唯一。由于外部依赖的返回对象需要通过序列化才能保存和传输,因此将外部依赖的返回值或者返回对象序列化为返回文本,所述序列化可以使用常规的序列化方法。为保证外部依赖的返回结果的格式一致,因此对返回值也进行序列化。可以先根据被测代码的名称、调用参数和调用次数生成mock特征值,再将返回值或返回对象序列化;也可以先将返回值或返回对象序列化,再根据被测代码的名称、调用参数和调用次数生成mock特征值;生成mock特征值和返回值或返回对象的序列化也可以同时进行。
由于返回值和返回对象需要序列化后保存和传输,通过生成mock特征值来代替被测代码的名称、调用参数和调用次数和序列化后的文本对应,可以使对应关系更简洁和准确,不易出错。将返回值或者返回对象序列化还有利于返回值或者返回对象的存储、保持和网络传输。
更重要的是,利用所述mock对象进行mock测试时,是根据提供给mock对象的入口参数来得到对应的返回结果,在本申请中,通过将入口参数和外部依赖的返回结果对应来构成mock对象,从而克服编码方式和配置方式构建mock对象工作量大、效率低且真实性不高的缺陷,但入口参数通常很多,通过入口参数来查找对应的返回结果(即返回文本)将使查找工作量很大,查找算法也将会变得非常复杂而难以实现。而根据入口参数(被测代码的名称、调用参数和调用次数)生成唯一的mock特征值后,以mock特征值表征入口参数,通过mock特征值来查找对应的返回文本,可以使查找算法非常简单、易实现,而且查找效率高。
在得到mock特征值和返回文本后,可以将mock特征值作为索引,返回文本作为索引的值,从而将mock特征值和返回文本对应起来。每个mock特征值和对应的返回文本视为一个mock对象。同一个被测代码,由于调用参数和调用次数的不同会对应多个mock对象,但由于本申请中mock特征值的生成过程中包含了被测代码的名称,且每个mock特征值唯一,因此mock测试时,只需根据被测代码的名称、调用参数和调用次数生成调用特征值,根据调用特征值查找到与调用特征值相等的mock特征值,可以唯一地查找到对应的mock对象,因此在进行mock测试时,不需要根据被测代码的名称去查找各个mock对象,再在各个mock对象中查找与当前调用参数和调用次数对应的mock对象,从而可以使mock测试过程更简洁准确。
生成的mock对象可以存储于本地的mock库中,也可以存储于远程mock平台。同一个被测代码,在使用不同的调用参数和调用次数生成多个mock对象后,优选的是所述多个mock对象可以作为一组mock对象连续存储于本地的mock库或远处mock平台中,由于每个mock对象的mock特征值唯一,对应于同一个被测代码的多个mock对象也可以分散存储,因此即使存储过程中由于存储失误使不同的mock对象之间存储的顺序被打乱,也不会影响mock测试过程和测试结果。
本申请提供的一种自动mock外部依赖的方法,在应用时,可以使用循环运行被测代码的方式,每次运行被测代码时使用不同的调用参数和调用次数,被测代码循环运行至所有调用参数和调用次数使用完毕时结束运行,每次运行被测代码根据被测代码的名称、调用参数和调用次数以及外部依赖的返回值或返回对象生成一个mock对象,被测代码的循环运行结束时,对应于被测代码的所有mock对象全部生成。使用循环运行的方式可以避免每次人为运行被测代码。其中,不同的调用参数和调用次数的选择可以根据mock测试的目的确定。
当同一个被测代码对应的mock对象都生成完毕并存储后,在mock测试中便可以根据不同的调用参数和调用次数进行多次测试和反复测试,使mock测试过程更为简单方便。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,并存储在一个存储介质中,包括若干指令用以使得一台智能设备执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储数据和程序代码的介质。
相应于第一方面,在第二方面,本申请提供一种自动mock外部依赖的装置。图2为本申请一示例性实施例示出的一种自动mock外部依赖的装置的框图。如图2所示,所述装置可以包括:
被测端数据获取模块U201,用于获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数。
所述被测端数据获取模块U201可以使用拦截的方式或者赋值的方式获取被测代码的名称、调用参数和调用次数。
外部端数据获取模块U202,与U201连接,用于获取外部依赖对所述调用的返回值或者返回对象。
当所述被测端数据获取模块U201使用拦截的方式时,优选的是,所述外部端数据获取模块U202相应地使用拦截的方式,在可能的实施方式中,所述外部端数据获取模块U202也可以使用赋值的方式。当所述被测端数据获取模块U201使用赋值的方式时,所述外部端数据获取模块U202可以使用拦截的方式或者赋值的方式。
mock对象生成模块U203,与U202连接,用于根据所述被测代码的名称、调用参数和调用次数生成mock特征值,将所述外部依赖的返回值或者返回对象序列化为返回文本,且将所述mock特征值与所述返回文本对应,所述mock特征值和对应的返回文本构成mock对象。
存储模块U204,与U203连接,用于存储所述mock对象。
其中,所述mock对象生成模块U203可以使用哈希算法生成mock特征值。所述序列化可以使用常规的序列化技术。生成mock特征值和得到序列化的返回文本后,可以将mock特征值作为索引,所述返回文本作为索引值,从而将mock特征值和返回文本对应起来,并构成mock对象。存储模块U204可以为本地存储模块,也可以为远程存储模块,当存储模块U204为远程存储模块时,mock对象生成模块U203和存储模块U204通过远程接口连接。存储mock对象的存储模块也可以称为mock库。
其中,所述被测端数据获取模块U201,在一种可能的实施方式中,可以包括:
被测端拦截子模块,用于拦截被测代码对外部依赖的调用。
被测端记录子模块,用于记录所述被测代码的名称、调用参数和调用次数。
其中,记录调用参数包括记录调用参数的名称、值和类型。调用次数为第几次调用外部依赖。被测代码的名称可以在被测代码第一次运行时被拦截后记录,并在以后的运行中保持,调用参数和调用次数在每次运行被拦截时记录。被测代码的名称用于将生成的mock对象和被测代码对应起来。
其中,所述外部端数据获取模块U202,在一种可能的实施方式中,可以包括:
调用子模块,用于根据所述调用参数和调用次数调用外部依赖;
外部端记录子模块,用于记录外部依赖的返回值或者返回对象。
其中,调用子模块取代被测代码来调用外部依赖,通过将记录的当次的调用参数和调用次数作为入口参数输入至外部依赖,实现对外部依赖的调用。将记录的当次的调用参数和调用次数作为入口参数输入至外部依赖后,外部依赖会根据入口参数返回其根据入口参数输出返回值或者返回对象。所述外部端记录子模块接收并记录外部依赖输出的返回值或者返回对象,记录之后可以将返回值或者返回对象传回至被测代码。
其中,所述mock对象生成模块U203,在一种可能的实施方式中,可以包括:
mock特征值生成子模块,用于根据被测代码的名称、调用参数和调用次数生成mock特征值;
序列化子模块,用于将所述外部依赖的返回值或者返回对象序列化为返回文本;
构建子模块,用于将所述mock特征值与所述外部依赖的返回值或者返回对象对应,所述mock特征值和对应的所述外部依赖的返回值或者返回对象构成mock对象。
其中,所述序列化子模块可以为常规的序列化模块。
在第三方面,本申请提供一种mock测试方法,以利用本申请在第一方面提供的自动mock外部依赖的方法所得到的mock对象进行测试。图3为本申请一示例性实施例示出的一种mock测试方法的流程示意图。如图3所示,所述方法可以包括:
在步骤S301中,拦截被测代码对外部依赖的调用。
在单元测试过程中执行被测代码时,拦截被测代码对外部依赖的调用。
在步骤S302中,获取被测代码的名称、调用参数和调用次数。
其中,获取调用参数包括获取调用参数的名称、值和类型,所述调用次数为第几次调用外部依赖。
在步骤S303中,根据所述被测代码的名称、调用参数和调用次数生成调用特征值;
其中,生成调用特征值的方法和mock对象中mock特征值的生成方法相同,例如,可以使用与生成mock对象中的mock特征值相同的哈希算法来生成调用特征值,从而使根据相同的被测代码的名称、调用参数和调用次数生成的调用特征值和mock对象中的mock特征值相等。
在步骤S304中,根据调用特征值在mock对象中查找对应的返回文本。
其中,mock对象存储于存储模块(或mock库)之中。在得到所述调用特征值后,由于调用特征值和对应的mock特征值相等,从而能够以调用特征值为索引,在存储模块(mock库)中,查找到对应的mock对象,并查找到mock对象中与所述调用特征值对应的返回文本。当存储模块为远程存储模块(或远程mock库)时,通过远程访问所述存储模块(mock)库,在其中查找到调用特征值对应的返回文本。
在步骤S305中,反序列化所述返回文本,得到外部依赖的返回值或者返回对象。
所述反序列化可以使用常规的反序列化方法。
在步骤S306中,将所述返回值或者返回对象返回给被测代码。
在步骤S307中,验证所述返回值或者返回对象。
其中,验证所述返回值或者返回对象可以使用常规的单元测试验证方法。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,并存储在一个存储介质中,包括若干指令用以使得一台智能设备执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储数据和程序代码的介质。
相应于第三方面,在第四方面,本申请提供一种mock测试装置。图4为本申请一示例性实施例示出的一种mock测试装置的框图。如图4所示,所述装置可以包括:
调用拦截模块U401,用于拦截被测代码对外部依赖的调用。
所述调用拦截模块U401可以为常规的拦截程序调用的模块。
数据获取模块U402,与U401连接,获取所述被测代码的名称、调用参数和调用次数;
其中,获取调用参数包括获取调用参数的名称、值和类型,调用次数为第几次调用外部依赖。
调用特征值生成模块U403,与U402连接,用于根据所述被测代码的名称、调用参数和调用次数生成调用特征值,且所述调用特征值的生成方法和mock对象中mock特征值的生成方法相同。
查找模块U404,与U403连接,用于根据调用特征值在mock对象中查找对应的返回文本;
其中,在得到所述调用特征值后,可以在存储模块(mock库)中,以调用特征值为索引,查找到对应的mock对象,并查找到mock对象中与所述调用特征值对应的返回文本。当存储模块为远程存储模块(远程mock库)时,通过远程访问所述存储模块(mock)库,在其中查找到调用特征值对应的返回文本。
反序列化模块U405,与U404连接,用于反序列化所述返回文本,得到外部依赖的返回值或者返回对象。
返回模块U406,与U405连接,用于将所述返回值或者返回对象返回给被测代码。
验证模块U407,与U406连接,用于验证所述返回值或者返回对象。
所述反序列化模块U405可以为常规的反序列化模块。
所述验证模块U407可以为常规的单元测试验证模块。
为了描述的方便,描述以上的装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者逆序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、装置或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、装置或者设备中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种自动mock外部依赖的方法,其特征在于,包括:
获取被测代码的名称,以及获取所述被测代码调用外部依赖的调用参数和调用次数,所述获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数,包括:拦截所述被测代码对外部依赖的调用,记录被测代码的名称、调用参数和调用次数;
获取所述外部依赖对所述调用产生的返回值或者返回对象;
根据所述被测代码的名称、调用参数和调用次数生成mock特征值,所述mock特征值为唯一的表征所述被测代码的名称、调用参数和调用次数的值;
将所述外部依赖的返回值或者返回对象序列化为返回文本;
将所述mock特征值与所述返回文本对应,所述mock特征值和对应的所述返回文本构成mock对象。
2.如权利要求1所述的自动mock外部依赖的方法,其特征在于,所述获取所述外部依赖对所述调用产生的返回值或者返回对象,包括:
根据所述调用参数和调用次数调用外部依赖;
记录外部依赖的返回值或者返回对象。
3.如权利要求1所述的自动mock外部依赖的方法,其特征在于,根据被测代码的名称、调用参数和调用次数使用哈希算法生成mock特征值。
4.一种自动mock外部依赖的装置,其特征在于,包括:
被测端数据获取模块,用于获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数,所述被测端数据获取模块,包括:
被测端拦截子模块,用于拦截被测代码对外部依赖的调用;
被测端记录子模块,用于记录被测代码的名称、调用参数和调用次数;
外部端数据获取模块,用于获取外部依赖对所述调用产生的返回值或者返回对象;
mock对象生成模块,用于根据被测代码的名称、调用参数和调用次数生成mock特征值,将所述外部依赖的返回值或者返回对象序列化为返回文本,且将所述mock特征值与所述返回文本对应,所述mock特征值和对应的返回文本构成mock对象,其中,所述mock特征值为唯一的表征所述被测代码的名称、调用参数和调用次数的值;
存储模块,用于存储所述mock对象。
5.如权利要求4所述的自动mock外部依赖的装置,其特征在于,所述外部端数据获取模块,包括:
调用子模块,用于根据所述调用参数和调用次数调用外部依赖;
外部端记录子模块,用于记录外部依赖的返回值或者返回对象。
6.如权利要求4所述的自动mock外部依赖的装置,其特征在于,所述mock对象生成模块,包括:
mock特征值生成子模块,用于根据被测代码的名称、调用参数和调用次数生成mock特征值;
序列化子模块,用于将所述外部依赖的返回值或者返回对象序列化为返回文本;
构建子模块,用于将所述mock特征值与所述外部依赖的返回值或者返回对象对应,所述mock特征值和对应的所述外部依赖的返回值或者返回对象构成mock对象。
7.一种mock测试方法,其特征在于,包括:
拦截被测代码对外部依赖的调用;
获取被测代码的名称、调用参数和调用次数;
根据所述被测代码的名称、调用参数和调用次数生成调用特征值,且所述调用特征值的生成方法和mock对象中mock特征值的生成方法相同,所述调用特征值为唯一的表征所述被测代码的名称、调用参数和调用次数的值;
根据所述调用特征值在mock对象中查找对应的返回文本;
反序列化所述返回文本,得到外部依赖的返回值或者返回对象;
将所述返回值或者返回对象返回给被测代码;
验证所述返回值或者返回对象。
8.一种mock测试装置,其特征在于,包括:
调用拦截模块,用于拦截被测代码对外部依赖的调用;
数据获取模块,获取被测代码的名称、调用参数和调用次数;
调用特征值生成模块,用于根据所述被测代码的名称、调用参数和调用次数生成调用特征值,且所述调用特征值的生成方法和mock对象中mock特征值的生成方法相同,所述调用特征值为唯一的表征所述被测代码的名称、调用参数和调用次数的值;
查找模块,用于根据所述调用特征值在mock对象中查找对应的返回文本;
反序列化模块,用于反序列化所述返回文本,得到外部依赖的返回值或者返回对象;
返回模块,用于将所述返回值或者返回对象返回给被测代码;
验证模块,用于验证所述返回值或者返回对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410370258.0A CN105335281B (zh) | 2014-07-30 | 2014-07-30 | 一种自动mock外部依赖的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410370258.0A CN105335281B (zh) | 2014-07-30 | 2014-07-30 | 一种自动mock外部依赖的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105335281A CN105335281A (zh) | 2016-02-17 |
CN105335281B true CN105335281B (zh) | 2018-03-20 |
Family
ID=55285835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410370258.0A Active CN105335281B (zh) | 2014-07-30 | 2014-07-30 | 一种自动mock外部依赖的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105335281B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107402854A (zh) * | 2016-05-19 | 2017-11-28 | 中兴通讯股份有限公司 | 测试信息管理方法、装置、测试用例执行***及设备 |
CN106970873B (zh) * | 2017-01-10 | 2021-07-09 | 创新先进技术有限公司 | 线上mock测试方法、装置及*** |
CN107659455B (zh) * | 2017-10-16 | 2020-01-03 | 武汉斗鱼网络科技有限公司 | 一种iOS端Mock数据的方法、存储介质、设备及*** |
CN109739526A (zh) * | 2017-10-30 | 2019-05-10 | 北京京东尚科信息技术有限公司 | 代码更新方法和装置 |
CN109901983B (zh) * | 2017-12-07 | 2022-09-06 | 北京京东尚科信息技术有限公司 | 自动化测试方法及装置、存储介质、电子设备 |
CN107992425B (zh) * | 2017-12-25 | 2020-09-22 | 携程旅游网络技术(上海)有限公司 | 单元测试Mock代码的自动生成方法及*** |
CN108563575B (zh) * | 2018-04-16 | 2019-12-10 | 百度在线网络技术(北京)有限公司 | 应用程序测试方法、装置、终端及计算机可读存储介质 |
US10949334B2 (en) | 2018-11-26 | 2021-03-16 | Cognizant Technology Solutions India Pvt. Ltd. | System and a method for automated unit test generation |
CN111221721B (zh) * | 2018-11-27 | 2023-09-05 | ***通信集团上海有限公司 | 一种单元测试案例自动化录制和执行方法及装置 |
CN110119354A (zh) * | 2019-04-19 | 2019-08-13 | 平安普惠企业管理有限公司 | 基于测试用例生成的软件测试方法、装置及电子设备 |
CN110489334A (zh) * | 2019-07-24 | 2019-11-22 | 贝壳技术有限公司 | 一种***联调测试处理方法及装置 |
CN112019558A (zh) * | 2020-09-03 | 2020-12-01 | 深圳壹账通智能科技有限公司 | 通用挡板测试方法、装置、设备和计算机存储介质 |
CN112579440A (zh) * | 2020-12-02 | 2021-03-30 | 深圳前海微众银行股份有限公司 | 一种虚拟测试依赖对象的确定方法及装置 |
US11334471B1 (en) | 2020-12-02 | 2022-05-17 | UiPath Inc. | Mocking robotic process automation (RPA) activities for workflow testing |
CN112559344A (zh) * | 2020-12-10 | 2021-03-26 | 平安养老保险股份有限公司 | 远程mock测试方法及*** |
CN112579467A (zh) * | 2020-12-28 | 2021-03-30 | 北京百家科技集团有限公司 | 一种测试方法、装置、计算机设备及存储介质 |
CN112732567B (zh) * | 2020-12-31 | 2023-06-27 | 平安银行股份有限公司 | 基于ip的mock数据测试方法、装置、电子设备及存储介质 |
US11989122B2 (en) | 2022-06-29 | 2024-05-21 | International Busi Corporation ess Machines | Handling mock objects that are written in the form of multiple assignment instructions |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855177A (zh) * | 2011-06-30 | 2013-01-02 | 阿里巴巴集团控股有限公司 | 一种单元测试的方法和装置 |
CN102855178A (zh) * | 2011-06-30 | 2013-01-02 | 阿里巴巴集团控股有限公司 | 一种单元测试中生成Mock库的方法和装置 |
CN102981947A (zh) * | 2011-09-07 | 2013-03-20 | 阿里巴巴集团控股有限公司 | 一种测试中准备数据的方法及*** |
CN103593172A (zh) * | 2012-10-29 | 2014-02-19 | 百度在线网络技术(北京)有限公司 | 面向统一结构化数据的应用程序的开发***、方法及装置 |
CN103593173A (zh) * | 2012-10-29 | 2014-02-19 | 百度在线网络技术(北京)有限公司 | 一种应用程序的一体化开发***、方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100547562C (zh) * | 2006-10-18 | 2009-10-07 | 国际商业机器公司 | 自动生成可再现运行时问题的单元测试用例的方法和*** |
-
2014
- 2014-07-30 CN CN201410370258.0A patent/CN105335281B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102855177A (zh) * | 2011-06-30 | 2013-01-02 | 阿里巴巴集团控股有限公司 | 一种单元测试的方法和装置 |
CN102855178A (zh) * | 2011-06-30 | 2013-01-02 | 阿里巴巴集团控股有限公司 | 一种单元测试中生成Mock库的方法和装置 |
CN102981947A (zh) * | 2011-09-07 | 2013-03-20 | 阿里巴巴集团控股有限公司 | 一种测试中准备数据的方法及*** |
CN103593172A (zh) * | 2012-10-29 | 2014-02-19 | 百度在线网络技术(北京)有限公司 | 面向统一结构化数据的应用程序的开发***、方法及装置 |
CN103593173A (zh) * | 2012-10-29 | 2014-02-19 | 百度在线网络技术(北京)有限公司 | 一种应用程序的一体化开发***、方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105335281A (zh) | 2016-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105335281B (zh) | 一种自动mock外部依赖的方法及装置 | |
EP3435260A1 (en) | Method and device for outputting risk information and constructing risk information | |
Savchenko et al. | Microservices validation: Mjolnirr platform case study | |
CN107273286A (zh) | 针对任务应用的场景自动化测试平台及方法 | |
CN111897724B (zh) | 一种适用于云平台的自动化测试方法及装置 | |
CN106951364A (zh) | 测试方法及装置 | |
CN106484610A (zh) | 一种Beta测试方法和装置 | |
CN102999320A (zh) | 测试用例自动生成方法和*** | |
CN106354645A (zh) | 基于后台***服务或接口的测试方法和测试平台 | |
CN109933535A (zh) | 测试用例的生成方法、装置和服务器 | |
CN107659455A (zh) | 一种iOS端Mock数据的方法、存储介质、设备及*** | |
CN109656813A (zh) | 一种测试用例运行方法及装置 | |
CN106209515A (zh) | 接入网设备自动化测试*** | |
CN109885474A (zh) | 测试用例编辑方法及装置、终端和计算机可读存储介质 | |
CN106547870A (zh) | 数据库的分表方法及装置 | |
CN106326776A (zh) | 基于规则的数据对象验证方法、装置、***及电子设备 | |
CN103345439A (zh) | 一种信息***全链路健康状态监控方法及装置 | |
CN110399309A (zh) | 一种测试数据生成方法及装置 | |
CN109948212A (zh) | 建模规范检查方法及装置 | |
CN106874202A (zh) | 用于单元测试的方法、装置以及可读存储介质 | |
CN107679423A (zh) | 分区完整性检查方法及装置 | |
CN106708723A (zh) | 一种测试、校验方法及装置 | |
CN107943412A (zh) | 一种分区***、删除分区中数据文件的方法、装置及*** | |
CN106940648A (zh) | 一种自动加载测试项的方法、设备以及测试*** | |
CN109617746B (zh) | 一种基于spcd文件的scd网络配置校验方法 |
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 |