接口测试从零开始系列_mock技术使用

1、什么情况下会使用mock技术

  (1)需要将当前被测单元和其依赖模块独立开来,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑

  ----------比如被测代码中需要依赖第三方接口返回值进行逻辑处理,可能因为网络或者其他环境因素,调用第三方经常会中断或者失败,无法对被测单元进行测试,这个时候就可以使用mock技术来将被测单元和依赖模块独立开来,使得测试可以进行下去。

  (2)被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理

  ----------比如service层的代码中,包含对Dao层的调用,但是,DAO层代码尚未实现

  (3)被测单元依赖的对象较难模拟或者构造比较复杂

  ----------比如,支付宝支付的异常条件有很多,但是模拟这种异常条件很复杂或者无法模拟,比如,查询聚划算的订单结果,无法在测试环境进行模拟

  2、Mock技术分类

  (1)手动构造mock对象

  ---------------比如,可以自己写某个接口方法的实现,根据需要编写返回值,测试代码中使用该实现类对象

  缺点:会增加代码量,在写mock对象代码时,有可能引入错误

  (2)使用开源代码提供的构造mock方法

  --------------比如easyMock,提供了对接口类的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令Mock对象返回指定的值或抛出指定异常

  3、EasyMock使用

  (1)引入easyMock

  ------------在maven工程中,通过pom配置依赖关系

<dependency>
    <groupId>org.easymock</groupId>
    <artifactId>easymock</artifactId>
    <version>3.0</version>
    <scope>test</scope>
</dependency>

  ------------在普通java工程中,通过添加外部包的方式

  (2)使用easyMock过程

  1)使用EasyMock生成Mock对象;
pingJiaDao = mockControl.createMock(IPingJiaDao.class);

  2)设定Mock对象的预期行为和输出;
EasyMock.expect(pingJiaDao.getGoodPingJiaRate(storeId)).andReturn(0.11);

  3)将Mock对象切换到Replay状态;
EasyMock.replay(pingJiaDao);

  4)调用Mock对象方法进行单元测试
storeService.setStoredao(pingJiaDao);
double rate = storeService.getStoreGoodRate(storeId);

  5)对Mock对象的行为进行验证。
EasyMock.verify(pingJiaDao);

  4、其他easyMock功能

  (1)特殊的mock对象:niceMock
(2)参数匹配器
(3)重置mock对象
(4)模拟异常抛出
(5)设置调用次数


本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

amie 规则挖掘_AMIE的完整形式是什么?

amie 规则挖掘AMIE&#xff1a;工程师协会的准会员 (AMIE: Associate Member of the Institution of Engineers) AMIE is an abbreviation of Associate Member of the Institution of Engineers. The Institution of Engineers India Limited (IEIL) provides this profession…

java 马克思_单链表-Java

public class SinglyListNode {int val;SinglyListNode next;SinglyListNode() {}SinglyListNode(int x) {this.val x;}}/*执行用时&#xff1a;12 ms, 在所有 Java 提交中击败了66.93%的用户内存消耗&#xff1a;39.5 MB, 在所有 Java 提交中击败了5.06%的用户*/class MyLink…

python的pass语句_Python | 演示pass语句的示例

python的pass语句python中的pass语句 (pass statement in python) "pass" is a type of null operation or null statement, when it executes nothing happens. It is used when you want do not want to write any code/statement to execute but syntactically a …

HDS:聚焦未来的投资“冻结”

一家日本IT网站报道的有关HDS冻结对高端存储产品的投资一事引发众议。让人陷入疑惑的这次声明就是&#xff0c;HDS认为单纯的阵列产品并非企业存储的未来。 6月1日&#xff0c;IT Pro Nikkei网站发布了一篇报道&#xff0c;内容援引HDS一份表示将冻结高端存储业务的简报。这引发…

java js对象转字符串数组_JS数组转字符串(3种方法)【转】

JavaScript 允许数组与字符串之间相互转换。其中 Array 方法对象定义了 3 个方法&#xff0c;可以把数组转换为字符串&#xff0c;如表所示。数组方法说明toString()将数组转换成一个字符串toLocalString()把数组转换成本地约定的字符串join()将数组元素连接起来以构建一个字符…

中美共建大数据创新研究中心

由贵阳市人民政府、工信部电子一所、美国加州大学伯克利分校合作共建的贵州伯克利大数据创新研究中心日前在贵阳揭牌。 据了解&#xff0c;贵州伯克利大数据创新研究中心将分两阶段建设。第一阶段&#xff0c;2016年9月份至2017年底&#xff0c;将重点完成“学龄儿童大数据分析…

Python中的__init__和self是做什么的?

The __init__ and self are two keywords in python, which performs a vital role in the application. __init__和self是python中的两个关键字&#xff0c;在应用程序中起着至关重要的作用。 To begin with, it is important to understand the concept of class and object…

Palo Alto Networks漏洞防护扩展至云端

中国北京&#xff0c;2016年4月12日 –下一代安全企业Palo Alto Networks?(纽交所代码&#xff1a;PANW)近日宣布进一步增强其下一代安全平台&#xff0c;扩展漏洞防护能力&#xff0c;以满足那些依赖云环境和SaaS应用的业务对安全的需求。 企业机构需要变得更加灵活和有竞争力…

java 嵌套调用_Java嵌套类的使用

嵌套类是指被定义在另一个类内部的类&#xff0c;它为外部类提供服务。嵌套类分四种&#xff1a;静态成员类、非静态成员类、匿名类和局部类。一、静态成员类与非静态成员类的区别&#xff1f;在什么情况下可以用静态成员类&#xff1f;我们知道在类的设计中&#xff0c;为了避…

c语言getenv函数_getenv()函数与C ++中的示例

c语言getenv函数C getenv()函数 (C getenv() function) getenv() function is a library function of cstdlib header. It is used to get the environment string. It accepts a parameter which is an environment variable name (platform dependent, it may either case s…

isless()函数与C ++中的示例

C isless()函数 (C isless() function) isless() function is a library function of cmath header, it is used to check whether the given first value is less than the second value. It accepts two values (float, double or long double) and returns 1 if the first …

停牌17个月 汉能薄膜真的要复牌了?

最近&#xff0c;停牌超过一年的汉能薄膜又有新进展。 10月7日&#xff0c;路透社引述知情人士的消息称&#xff0c;香港证监会或将允许汉能薄膜发电复牌&#xff0c;不过复牌的前提是需汉能将符合一些特定条件。 该消息人士透露&#xff0c;证监会告知汉能&#xff0c;若要恢复…

hive java udf_UDF_Hive教程_田守枝Java技术博客

UDF是User-Defined Functions(用户定义函数)的简称。通过以下命令可以查看HIVE中函数的相关文档&#xff1a;SHOW FUNCTIONS;DESCRIBE FUNCTION ;DESCRIBE FUNCTION EXTENDED ;1、UDF函数可以直接应用于select语句&#xff0c;对查询结构做格式化处理后&#xff0c;再输出内容。…

python 示例_带有示例的Python列表remove()方法

python 示例列出remove()方法 (List remove() Method) remove() method is used to remove the first occurrence of the given element, the method is called with this list (the list from which we have to remove the element) and accepts the element to be removed as…

车联网领域,传统TSP企业做错了什么 ?

当下&#xff0c;车联网的定义更加丰富和宽泛&#xff0c;除了传统意义上的Telematics服务&#xff0c;数字服务、移动出行服务、电商平台等将被融入到车联网概念中&#xff0c;与用车相关的维修保养、洗车、代驾等第三方服务&#xff0c;也将成为整车厂整合的重点被纳入到车联…

gettimeofday_PHP gettimeofday()函数与示例

gettimeofdayPHP gettimeofday()函数 (PHP gettimeofday() function) gettimeofday() function is used to get the current time. gettimeofday()函数用于获取当前时间。 Syntax: 句法&#xff1a; gettimeofday(return_float);Parameter(s): 参数&#xff1a; return_floa…

Shell脚本/bin/bash^M: bad interpreter错误解决方法

2019独角兽企业重金招聘Python工程师标准>>> 在windows下保存了一个脚本文件&#xff0c;用ssh上传到centos&#xff0c;添加权限执行nginx提示没有那个文件或目录。 shell脚本放到/etc/init.d/目录下&#xff0c;再执行/etc/init.d/nginx&#xff0c;提示多了这句/…

java中map的遍历方法_Java中Map的三种遍历方式

集合中的三种遍历方式&#xff0c;如下代码&#xff1a;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public class TestMap {public static void main(String[] arg…

uuid hashcode_Java UUID hashCode()方法与示例

uuid hashcodeUUID类hashCode()方法 (UUID Class hashCode() method) hashCode() method is available in java.util package. hashCode()方法在java.util包中可用。 hashCode() method is used to retrieve the hash code for this UUID. hashCode()方法用于检索此UUID的哈希码…

java如何遍历combobox_如何通过COMBOBOX设置Java中的框架标题?

我想创建类似下图的内容,当用户从组合框选项中选择年份、月份和日期时,这些操作将更改标题,并且必须根据所选数据进行更改,这很简单,我还是新手到目前为止,我已经做到了,问题是它不起作用,我怎么能做到呢?,你能帮我一下吗?import java.awt.GridLayout;import java.awt.event.…