[发明专利]一种自动mock外部依赖的方法及装置有效
申请号: | 201410370258.0 | 申请日: | 2014-07-30 |
公开(公告)号: | CN105335281B | 公开(公告)日: | 2018-03-20 |
发明(设计)人: | 孙琛 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京弘权知识产权代理事务所(普通合伙)11363 | 代理人: | 逯长明,许伟群 |
地址: | 开曼群岛*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 自动 mock 外部 依赖 方法 装置 | ||
技术领域
本发明涉及软件测试技术领域,尤其涉及一种自动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外部依赖的装置,包括:
被测端数据获取模块,用于获取被测代码的名称,以及获取被测代码调用外部依赖的调用参数和调用次数;
外部端数据获取模块,用于获取外部依赖对所述调用产生的返回值或者返回对象;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410370258.0/2.html,转载请声明来源钻瓜专利网。