什么是Mockito Extra接口?
如果要編寫(xiě)輕量級(jí)的JUnit測(cè)試, Mockito是我最喜歡的小幫手。 如有必要,可以通過(guò)模擬輕松地替換被測(cè)單元的“實(shí)際”依賴關(guān)系,這非常有用。 尤其是在處理框架API的邊界線時(shí),此類依賴項(xiàng)的設(shè)置否則可能非常昂貴。
但是有時(shí)候情況要復(fù)雜一些。 例如,如果測(cè)試出于某種原因需要與至少一個(gè)屬于這種框架的真實(shí)實(shí)例進(jìn)行交互。 如果此交互包括將模擬作為參數(shù)傳遞給此實(shí)例,那么很幸運(yùn),實(shí)現(xiàn)會(huì)將參數(shù)強(qiáng)制轉(zhuǎn)換為從交互器的角度來(lái)看未知的類型。
這是一個(gè)簡(jiǎn)單的例子來(lái)澄清這一點(diǎn):
可以將Bar類視為需要某種實(shí)現(xiàn)的框架代碼。 由于參數(shù)類型Foo不能反映這種期望,因此將Foo模擬傳遞給Bar的構(gòu)造函數(shù)將導(dǎo)致測(cè)試失敗,并帶有ClassCastException 。
也許您在想到上述情況時(shí)首先想到的是,框架通過(guò)強(qiáng)制轉(zhuǎn)換為未聲明的類型而變得很糟,并且最好將所有內(nèi)容扔掉并重新開(kāi)始,從而更好!
不幸的是,在現(xiàn)實(shí)世界中,這種行為可以說(shuō)是有效的。 例如, Eclipse平臺(tái)具有許多被聲明為“不打算由客戶端實(shí)現(xiàn)”的接口。 一個(gè)很好的例子就是團(tuán)隊(duì)API的IHistoryView接口。 可以肯定地使用3.x平臺(tái),盡管IHistoryView實(shí)現(xiàn)擴(kuò)展了IViewPart ,但是歷史視圖界面并未公開(kāi)這一細(xì)節(jié)。
在這種情況下,有時(shí)可能需要?jiǎng)?chuàng)建多種類型的模擬-一種實(shí)現(xiàn)IHistoryView和IViewPart的模擬-盡管API并未指出所有這些。 Mockito通過(guò)鮮為人知的MockSettings#extraInterfaces模擬配置功能簡(jiǎn)化了此過(guò)程。 以下代碼段顯示了如何使用extraInterfaces修復(fù)上述示例的測(cè)試。
@Test public void testConstructor() {Foo mock = mock( Foo.class,withSettings().extraInterfaces( Runnable.class ) );// the mock now supports the cast to runnableBar bar = new Bar( mock );[...] }使用withSettings的方法調(diào)用會(huì)創(chuàng)建一個(gè)新的MockSettings實(shí)例,并使用其他Runnable類型MockSettings進(jìn)行配置。 生成的Foo模擬實(shí)例同時(shí)實(shí)現(xiàn)Foo和Runnable 。 現(xiàn)在測(cè)試通過(guò)了。
但是請(qǐng)記住,盡管在這篇文章中使用額外接口的動(dòng)機(jī)似乎是合理的,但要強(qiáng)調(diào)的是,在實(shí)際使用此功能之前,您應(yīng)該三思而后行。 或者如文檔所述,“如果您碰巧經(jīng)常使用它,請(qǐng)確保您確實(shí)在編寫(xiě)簡(jiǎn)單,干凈且可讀的代碼。” 粗心地使用它絕對(duì)是一個(gè)預(yù)定的突破點(diǎn)。
翻譯自: https://www.javacodegeeks.com/2014/03/what-are-mockito-extra-interfaces.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的什么是Mockito Extra接口?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓电视遥控器app(安卓电视遥控)
- 下一篇: 环境备案系统官网(环境备案系统)