zoukankan      html  css  js  c++  java
  • 在Kotlin上怎样用Mockito2 mock final 类(KAD 23)

    作者:Antonio Leiva

    时间:Mar 2, 2017

    原文链接:https://antonioleiva.com/mockito-2-kotlin/

    如我们在前面文章中谈到的,Kotlin最常见的问题之一是,在默认情况下,所有类和函数都是关闭的。

    这就是说,如果你要mock一个类(这在Java测试中,这些可能是非常普通的),你或是需要用保留字open将其打开,或是将其提取出一个接口。

    这两种方法都可能是令人厌烦的,事实上他们限制Java开发者使用Kotlin

    幸运的是,Mockito 2 除去了这一限制,今天我计划教你怎样做。

    那问题是什么?

    想象你在Kotlin中有一个类,它像这样:

    1 class ClosedClass {
    2 
    3     fun doSomething() {
    4     }
    5 }

    你需要测试调用该类的doSomething方法。

    其方法是这样:

    1 @Test fun testClosedClass() {
    2     val c = Mockito.mock(ClosedClass::class.java)
    3     c.doSomething()
    4     verify(c).doSomething()
    5 }

    如果你用 Mockito 1.x版本,你会得到下面错误:

    Mockito cannot mock/spy following:

    – final classes

    – anonymous classes

    – primitive types

    将更新依赖关系到Mockito 2

    如我们所说,Mockito 2 完全能够mock它,所以我们要更新依赖关系。在编写这篇文章是,Mockito 2的最新版本是2.8.9。但是,由于它们最近经常更新,请检查其最新版本。

    1 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文件:

    它是一个简单的文本文件:

    1 mock-maker-inline

    再没其它内容。

    现在,你能够再次测试,并看到它运行正常。非常棒!

     

    Mock属性

    你也能mock属性,且也没有问题。例如,如果我们修改这个类的代码:

    1 class ClosedClass(val prop: Int) {
    2  
    3     fun doSomething() {
    4     }
    5 }

    来让我们看看mock的属性值:

    1 @Test fun testClosedClass() {
    2     val c = Mockito.mock(ClosedClass::class.java)
    3     `when`(c.prop).thenReturn(3)
    4  
    5     val prop = c.prop
    6     assertEquals(3, prop)
    7 }

    我要求其返回3。其后,我检查值是正确的。

    你也能够检查属性已经被调用:

    1 verify(c).prop

    结论

    如你所见,在最流行mock库的最新版本中所有限制的消失了。

    所以再没有借口了!现在就可以使用Kotlin编写你的所有测试。

    请记住,你可以在这本免费指南找到所有这些内容以及更多详细内容,它将帮助你建立你的第一个项目;或在这本中,你可以学习怎样从头开始创建一个完整的应用程序。

     

  • 相关阅读:
    我罗斯方块
    《程序设计语言综合设计》第四周上机练习——5 好吃的巧克力
    《程序设计语言综合设计》第四周上机练习——4 特殊的翻译
    《程序设计语言综合设计》第四周上机练习——3 开机方案
    《程序设计语言综合设计》第三周上机练习——3 不诚实的卖家
    《高级语言程序设计实践》期末考试复现——9 丢手绢
    《高级语言程序设计实践》期末考试复现——7 芽衣的厨房
    《高级语言程序设计实践》期末考试复现——5 圣诞老人的糖果
    《高级语言程序设计实践》期末考试复现——4 希儿的日记本
    FZU_DS_2019_SequenceList
  • 原文地址:https://www.cnblogs.com/figozhg/p/6817848.html
Copyright © 2011-2022 走看看