在Kotlin上怎樣用Mockito2 mock final 類(KAD 23),kotlinmockito2

來源:互聯網
上載者:User

在Kotlin上怎樣用Mockito2 mock final 類(KAD 23),kotlinmockito2

作者: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.prop6     assertEquals(3, prop)7 }

 

我要求其返回3。其後,我檢查值是正確的。

 

 

你也能夠檢查屬性已經被調用:

 

1 verify(c).prop

 

 

結論

 

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

 

所以再沒有借口了!現在就可以使用Kotlin編寫你的所有測試。

 

請記住,你可以在這本免費指南找到所有這些內容以及更多詳細內容,它將協助你建立你的第一個項目;或在這本書中,你可以學習怎樣從頭開始建立一個完整的應用程式。

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.