在Kotlin上怎样用Mockito2 mock final 类(KAD 23)
时间:Mar 2, 2017
原文链接:https://antonioleiva.com/mockito-2-kotlin/
如我们在前面文章中谈到的,Kotlin最常见的问题之一是,在默认情况下,所有类和函数都是关闭的。
这就是说,如果你要mock一个类(这在Java测试中,这些可能是非常普通的),你或是需要用保留字open
将其打开,或是将其提取出一个接口。
这两种方法都可能是令人厌烦的,事实上他们限制Java开发者使用Kotlin。
幸运的是,Mockito 2 除去了这一限制,今天我计划教你怎样做。
那问题是什么?
想象你在Kotlin中有一个类,它像这样:
class ClosedClass { fun doSomething() {
}
}
你需要测试调用该类的doSomething方法。
其方法是这样:
@Test fun testClosedClass() {
val c = Mockito.mock(ClosedClass::class.java)
c.doSomething()
verify(c).doSomething()
}
如果你用 Mockito 1.x版本,你会得到下面错误:
Mockito cannot mock/spy following:
– final classes
– anonymous classes
– primitive types
将更新依赖关系到Mockito 2
如我们所说,Mockito 2 完全能够mock它,所以我们要更新依赖关系。在编写这篇文章是,Mockito 2的最新版本是2.8.9。但是,由于它们最近经常更新,请检查其最新版本。
testCompile 'org.mockito:mockito-core:2.8.9'
现在我们再次运行代码,仍然是失败!
Mockito cannot mock/spy because :
– final class
虽然,我们根本没有限制mock匿名类或原始类型,但是它不同于final类。这是为什么?
这个选项仍是一个实验性,要求手动激活它。
使能mock final classes选择
要使能它,你需要在文件夹test/resources/mockito-extensions
下创建org.mockito.plugins.MockMaker
文件:
它是一个简单的文本文件:
mock-maker-inline
再没其它内容。
现在,你能够再次测试,并看到它运行正常。非常棒!
Mock属性
你也能mock属性,且也没有问题。例如,如果我们修改这个类的代码:
class ClosedClass(val prop: Int) { fun doSomething() {
}
}
来让我们看看mock的属性值:
@Test fun testClosedClass() {
val c = Mockito.mock(ClosedClass::class.java)
`when`(c.prop).thenReturn(3) val prop = c.prop
assertEquals(3, prop)
}
我要求其返回3。其后,我检查值是正确的。
你也能够检查属性已经被调用:
verify(c).prop
结论
如你所见,在最流行mock库的最新版本中所有限制的消失了。
所以再没有借口了!现在就可以使用Kotlin编写你的所有测试。
请记住,你可以在这本免费指南找到所有这些内容以及更多详细内容,它将帮助你建立你的第一个项目;或在这本书中,你可以学习怎样从头开始创建一个完整的应用程序。
在Kotlin上怎样用Mockito2 mock final 类(KAD 23)的更多相关文章
- 用PowerMock mock final类
mock final类相对简单,直接贴代码 被测方法: public class FinalEmployeeService { public void insertEmployee(Employee ...
- Mockito不能mock final类的解决办法
Mockito是很常用的测试工具,使用过程中可能会遇到下面的问题: Mockito cannot mock/spy because : - final class 问题重现: 引入该依赖到项目的mav ...
- 用PowerMock mock final类constructors
也相对简单,直接贴代码 被测方法 public class EmployeeServiceWithParam { public void createEmployee(final Employee e ...
- PowerMock学习(六)之Mock Final的使用
Mock Final mockfinal相对来说就比较简单了,使用powermock来测试使用final修饰的method或class,比较简单,接口调用部分,还是service调用dao. 对于接口 ...
- 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...
- Kotlin——中级篇(一):类(class)详解
在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- Java不可变类与final类
概念 Java的不可变类是指八个基础类型的包装类和String,他们的数据成员是不可变的.使用加法等操作时,其实是创建了一个新的对象. Java的final类是对类用关键字final进行修饰,说明该类 ...
- 动态绑定、阻止继承,final类和方法
1.编译器查看对象的声明类型和方法名.当调用 x.f(param); 且隐式参数x生命为C类对象.这时候可能有多个名字都叫f,但是参数类型不一样的方法.编译器会一一列举C类中名为f的方法和其超类中访问 ...
随机推荐
- Spring 声明式事务管理方式
声明式事务管理,基于AOP对目标代理,添加环绕通知,比编码方案优势,不具有侵入式,不需要修改原来的代码. 1.基于XML配置的声明式事务管理方案(案例) 接口Service public i ...
- scr 和 href 区别
HTML中的href和src有什么区别? 加载js的时候,用到的是<script style='text/javascript' src='js/demo.js'></script& ...
- mybais学习记录一——入门程序
一.传统连接数据库和执行sql的不足 1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能. 设想:使用数据库连接池管理数据库连接. 2. ...
- Windows下安装PCL点云库
原文链接:http://blog.csdn.net/u012337034/article/details/38270109 简介: 在Windows下安装PCL点云库的方法大概有两种: ...
- linux网络相关配制及命令
1.虚拟机配制 查看ip: ip addr 配制网卡(读者可以忽略): 编辑虚拟网络编辑器,修改子网IP 查看ip,输入ip addr 开启网络:ifup eth0 关闭网络:ifdown eth0 ...
- POJ 1410--Intersection(判断线段和矩形相交)
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16322 Accepted: 4213 Des ...
- 【vlan之四种方式链路认证组网]
---恢复内容开始--- 根据项目需求,搭建好如下拓扑图: 在[sysname]下配置给予协议的vlan vlan 1#vlan 10 protocol-vlan 0 ipv4#vlan 20 pro ...
- JavaScript : CORS和Ajax请求
CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是 ...
- 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】
IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...
- IdeaVim插件使用技巧--JetBrains Plugin Vim
在 IDEA Intellij小技巧和插件 一文中简单介绍了一下IdeaVim插件.在这里详细总结一下这个插件在日常编程中的一些常用小技巧.供有兴趣使用这个插件,但对Vim还不十分熟悉的朋友参考.当然 ...