在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的方法和其超类中访问 ...
随机推荐
- 2018.9.10 Java语言中的int及char数据类型的长度分别为(32,16 )
Byte类型 (8) Character类型(16) Integer类型 (32) Double类型 (64) Long类型 (64)
- qbxt Day1 测试犯傻祭祀
今天是2018/7/15 然后又是我最不喜乱的测试,期末考试爆炸仍在眼前. T1 van♂游戏 题意 小喵喵喜欢玩RPG游戏.在这款游戏中,玩家有两个属性,攻击和防御,现在小喵喵的攻击和防御都是1,接 ...
- 【Openjudge 9277 Logs Stacking堆木头】 题解
题目链接:http://noi.openjudge.cn/ch0206/9277/ ... #include <algorithm> #include <iostream> # ...
- 关于前端token
主要是一些前端使用的流程: 客户端使用用户名密码登录.服务端收到请求,去验证用户名与密码.验证成功后,服务端会签发一个 Token,把这个 Token 发送给客户端.客户端将收到的Token存储起来. ...
- 利用pt-query-digest分析MySQL慢查询
1.用法与参数说明 pt-query-digest [OPTIONS] [FILES] [DSN] --create-review-table ##当使用--review参数把分析结果输出到表中时,如 ...
- OCCI开发环境搭建(Ubuntu)
OCCI开放包(下载与服务器版本相同的开发包, 这用的是12.1.0.2): instantclient-basic-linux.x64-12.1.0.2.0.zip instantclient-sd ...
- Ganglia监控安装配置
172.17.20.123 node1 gmetad.gmond.web 172.17.20.124 node2 gmond 1.服务器安装好epel源后,安装ganglia yum install ...
- Linux入门-第四周
1.查找/var目录下不属于root.lp.gdm的所有文件 find命令:实时查找工具,通过指定路径完成文件查找,其特点查找速度略慢,可以精确查找,实时查找,可以只搜索用户具备读取和执行权限的目录 ...
- sql sever 基础 建表
---恢复内容开始--- SQL Sever 基础以创建银行数据库bankDB为案例 1.创建数据库 1-1 创建文件夹用以存放数据库 1-2 创建建库bankDB 2.创建数据库 2-1.创建用户信 ...
- scala成长之路(3)隐式转换
不废话,先上例子:定义一个参数类型为String的函数: scala> def sayHello(name:String) = println("hello " + name ...