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

    文章

    2904

    浏览量

    103003
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66820
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9358

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    串口的同步通信和异步通信有什么区别?什么情况下会使用异步通信?

    什么情况下会使用异步通信
    发表于 11-02 08:00

    单片机两个栈指针msp,psp分别在什么情况下使用?

    单片机两个栈指针 msp,psp 分别在什么情况下使用
    发表于 11-01 07:39

    什么情况下选择热电偶?什么情况下选择热电阻?哪个更合适?

    什么情况下选择热电偶?什么情况下选择热电阻?哪个更合适? 热电偶和热电阻都是温度传感器,用于测量温度。但是它们的原理、特性和应用场景不同。在实际选择中,需要根据具体情况,选择更合适的一种。 1.
    的头像 发表于 10-26 17:47 852次阅读

    弱上拉和强上拉分别在什么情况下使用?

    弱上拉和强上拉分别在什么情况下使用?
    发表于 10-23 07:55

    请问L9110芯片什么情况下会烧掉?

    L9110芯片什么情况下会烧掉?​
    发表于 10-20 06:43

    单片机中什么情况下会使用volatile定义变量?

    单片机中什么情况下会使用volatile定义变量
    发表于 10-16 08:09

    数据在内存的存储中右对齐是在什么情况下使用?

    数据在内存的存储中右对齐是在什么情况下使用
    发表于 10-15 11:20

    嵌入式操作系统在什么情况下我们需要考虑临界区?

    对于什么情况下我们才应该考虑临界区的问题
    发表于 10-15 07:41

    步进电机什么情况下会用到补偿脉冲?

    一般什么情况下会用的这个补偿脉冲
    发表于 10-10 08:04

    STM32的systick定时器什么情况下才会不工作?

    STM32的systick定时器什么情况下才会不工作
    发表于 09-22 07:57

    stm32的看门狗在什么情况下会失效?

    stm32的看门狗在什么情况下会失效
    发表于 09-22 07:24

    应急灯什么情况下才会亮?

    应急灯什么情况下才会亮? 应急灯指的是电源发生故障时,正常照明无法使用的情况下,启动的照明灯。比如说因为火灾导致正常照明系统失效时,消防疏散照明灯、消防应急照明灯会自动亮起,起到疏散人群,提供照明
    的头像 发表于 07-25 13:57 7757次阅读

    电机什么情况下需要配减速机呢

    电机是运动机械的最常用动力源,今天分享什么情况下电机需要配减速机。
    的头像 发表于 07-21 17:31 781次阅读
    电机<b class='flag-5'>什么情况下</b>需要配减速机呢

    电机什么情况下需要配减速机?

    电机是运动机械的最常用动力源,今天分享什么情况下电机需要配减速机。
    的头像 发表于 05-26 17:47 1268次阅读
    电机<b class='flag-5'>什么情况下</b>需要配减速机?