0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Mockito是什么 什么情况下使用Mockito

ouxn_HW_Digital 来源:华为开发者社区 作者:华为开发者社区 2021-08-09 14:39 次阅读

相信每一个程序猿在写Unit Test的时候都会碰到一些令人头疼的问题:如何测试一个rest接口;如何测试一个包含客户端调用服务端的复杂方法;如何测试一个包含从数据库读取数据的复杂方法。。。这些问题mockito都可以帮我们轻松地解决。

Mockito是啥?

Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试。简单来说,创建mock对象之后,这个对象里面的方法是怎么实现的可以不用去关心,我们只需要给这个方法定义一个输入、输出即可。

什么情况下使用Mockito:

假设现在要测试method A, method A里面又依赖Method B、Method C、Method D,而依赖的这3个method又不好去构建(如ObsClient需要真实AK SK,HttpClient需要构建客户端与服务器,Database相对好构建,但是假设Method C只是从table1、table2联合查询,你还得分别往table1、table2 insert数据,很繁琐),这时候可以考虑Mockito进行优雅测试,当然如果你想去构建真实的测试场景,未免有点舍本逐末了。

Mockito的使用:

1、引进依赖

Maven依赖如下:

《dependency》 《groupId》org.mockito《/groupId》 《artifactId》mockito-core《/artifactId》 《version》1.10.19《/version》 《scope》test《/scope》《/dependency》

代码中:

import org.mockito.Mockito

2、创建Mock对象

这里需要注意的是scala中只能对伴生对象或者Class创建mock对象,不能直接对Object创建mock对象。Scala中使用Mockito.mock(classOf[…])来创建mock对象

class VpcClient {

def getRouteTable(projectId: String, token: String, url: String): Seq[RouteTable] = {

val header = Map(RequestAttributes.X_AUTH_TOKEN -》 token,

“Content-Type” -》 MediaType.APPLICATION_JSON)

val response = restClient.get(url, header)}}object VpcClient {

private lazy val _instance: VpcClient = new VpcClient(conf)

private var mockClient: VpcClient = _

def getInstance(): VpcClient = {

// Keep original logic for other ut, which didn‘t set mock client.

if (RuntimeEnvironment.isTesting && null != mockClient) {

return mockClient

}

_instance

}

// only used for UT

def setMockClient(vpcClient: VpcClient): Unit = {

mockClient = vpcClient

}

}

举个例子,现在对VpcClient进行mock,从而可以调用VpcClient里面的getRouteTableList方法。

class UtilSuite { val vpcClient = Mockito.mock(classOf[VpcClient])

VpcClient.setMockClient(vpcClient)}

3、配置Mock对象

Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token,url)

当我们有了一个 Mock 对象后, 我们可以调用对象的方法,并且使用

Mockito.doReturn().when().method

,来设置当调用method时,在某输入下返回某输出。这里的输入是要与 method真实的入参一致的,输出也是要与method真实的返回参数一致。

class UtilSuite { val vpcClient = Mockito.mock(classOf[VpcClient])

VpcClient.setMockClient(vpcClient)

val projectId = “projectId”

val token = “token”

val url= “url”

val routeTableInfo = new RouteTableInfo

Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token, url)}

总结:

上面讲了Mockito的使用场景,以及scala中怎么使用Mockito创建mock对象。与java中使用Mockito有些许的差别,这些如果感兴趣的话都可以参考下官方文档:

官网:

http://mockito.org

API文档:

http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html

项目源码:

https://github.com/mockito/mockito

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2958

    浏览量

    104548
  • 代码
    +关注

    关注

    30

    文章

    4748

    浏览量

    68353
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9398

原文标题:干货| 干了这杯Mockito鸡尾酒,让你轻松进行单元测试

文章出处:【微信号:HW-DigitalHome,微信公众号:华为数字家庭】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    运放在什么情况下会出现正反输入端电压不等?

    专家老师,运放在什么情况下会出现正反输入端电压不等?
    发表于 09-24 08:06

    运放使用时,虚短,虚断在什么情况下使用呢?

    运放使用时,虚短,虚断在什么情况下使用呢?是在单端,差分输入条件都能使用么?
    发表于 09-14 08:53

    INA226的Alert引脚什么情况下会异常?

    INA226的Alert引脚什么情况下异常
    发表于 08-28 08:01

    DTU的设备号都在什么情况下需要填写呢?填写的规则是什么?

    DTU的设备号都在什么情况下需要填写,填写的规则是什么?
    发表于 07-26 08:18

    什么情况下会产生零序电流

    零序电流是指在三相电力系统中,三相电流的矢量和不为零的情况。在正常情况下,三相电力系统中的三相电流是平衡的,即三相电流的矢量和为零。但是,在某些特殊情况下,三相电流的矢量和不为零,就会产生零序电流
    的头像 发表于 07-15 14:53 3273次阅读

    受控源什么情况下可看为电阻

    受控源,又称为非独立源,是指其电压或电流值受电路中其他部分的电压或电流控制的电源。受控源在电路分析中具有重要的作用,其特性和行为与独立源(如电池、发电机等)有所不同。在某些特定情况下,受控源可以看作
    的头像 发表于 07-12 09:29 1658次阅读

    什么情况下需要使用接地电阻柜

    什么情况下需要使用接地电阻柜?中性点电阻柜不接地时,中性点接地方式一般为不接地、直接接地和通过消弧线圈或小电阻接地。接地电阻测试需要将接地引下线接至大地,但大地电阻因季节变化而不同,需要用数字钳形表
    的头像 发表于 06-18 08:36 248次阅读

    什么情况下需要申请T-mobile认证?T-mobile的优势是什么?

    在如今日益全球化的市场中,无线通信技术的发展日新月异,消费者的需求也变得越来越多样化。为了确保无线通信设备的兼容性和质量,许多设备制造商都选择进行T-Mobile认证。那么,什么情况下您应该考虑申请
    的头像 发表于 05-20 17:33 470次阅读
    <b class='flag-5'>什么情况下</b>需要申请T-mobile认证?T-mobile的优势是什么?

    什么情况下电容器会被击穿

    电容器是一种常见的电子元件,广泛应用于各个领域。然而,在特定条件,电容器可能会发生击穿现象,导致其无法正常工作甚至损坏。那么,在什么情况下电容器会被击穿呢?
    的头像 发表于 02-19 14:11 2509次阅读

    ADU7023的EEPROM在什么情况下会被改写?

    ADU7023的EEPROM在什么情况下会被改写?知道电源噪声在特定频率超过一定幅度会发生这种情况,排除电源噪声因素,还可能有什么原因呢?
    发表于 01-11 06:17

    高压差分探头什么情况下容易坏?

    高压差分探头什么情况下容易坏? 高压差分探头是一种用于测量电气设备中的电压差异的仪器。它通常由两个金属电极组成,它们用于感测电场强度,并将其转换为电压信号。然而,由于其特殊的设计和工作环境,高压差分
    的头像 发表于 01-08 16:36 641次阅读

    请问在什么情况下会使用带内置滤波器的变频器?

    请问大家一般在什么情况下会使用带内置滤波器的变频器?
    发表于 12-25 06:07

    干式电容器什么情况下会爆炸?

    干式电容器是一种常见的电子元件,但在特定情况下可能会发生爆炸。那么,干式电容器在哪些情况下会发生爆炸呢?
    的头像 发表于 12-15 14:20 756次阅读

    什么是always on buffer?什么情况下需要插always on buffer?

    相比普通的buffer cell,always on buffer(AOB)有secondary always on pin,可以让AOB即使在primary power off的情况下保持on的状态;AOB在secondary pg pin off的情况下也是off的。
    的头像 发表于 12-01 15:31 2387次阅读
    什么是always on buffer?<b class='flag-5'>什么情况下</b>需要插always on buffer?

    什么情况下可以把实际电源等效化成“理想的恒压源、恒流源”?

    什么情况下可以把实际电源等效化成“理想的恒压源、恒流源”? 当实际电源的行为近似于“理想的恒压源”或“恒流源”时,我们可以将其等效化为这两种理想的电源。 首先,让我们从定义开始。在电路中,电源是指
    的头像 发表于 11-30 14:49 1164次阅读