mockito 静态_在Java 8中使用不带静态导入的Mockito
mockito 靜態
如何通過在基于Java 8的項目中刪除靜態導入來簡化Mockito的使用。
基本原理
Mockito API基于(BDD)Mockito類中聚集的靜態方法(大部分),然后進行非常流暢的鏈接方法調用。 可以使用模擬/間諜/給定/然后/驗證靜態方法來啟動模擬創建,存根和呼叫驗證:
@Test public void shouldVerifyMethodExecution() {//givenTacticalStation tsSpy = BDDMockito.spy(TacticalStation.class);BDDMockito.willDoNothing().given(tsSpy).fireTorpedo(2);//whentsSpy.fireTorpedo(2);tsSpy.fireTorpedo(2);//thenBDDMockito.then(tsSpy).should(BDDMockito.times(2)).fireTorpedo(2); }非常詳細,但是從Java 5開始,可以使用靜態導入來簡化代碼,但是要付出額外的靜態導入的代價:
import static org.mockito.BDDMockito.then; import static org.mockito.BDDMockito.willDoNothing; import static org.mockito.BDDMockito.spy; import static org.mockito.BDDMockito.times; (...)@Test public void shouldVerifyMethodExecution() {//givenTacticalStation tsSpy = spy(TacticalStation.class);willDoNothing().given(tsSpy).fireTorpedo(2);//whentsSpy.fireTorpedo(2);tsSpy.fireTorpedo(2);//thenthen(tsSpy).should(times(2)).fireTorpedo(2); }導入可以隱藏在IDE中,通常不會造成太大影響。 然而,為了能夠只寫一個沒有類的方法名(例如, mock(TacticalStation.class) ),還是需要按ALT-ENTER(在IntelliJ IDEA中),以在第一次使用給定方法時添加每個靜態導入。測試班。 在Eclipse中情況更糟,在Eclipse中, 需要更早地將BDDMockito添加到“ Content Assist”中的“ Favorites”中,以使其由IDE建議。 Eclipse的人可能會說“您只需做一次”,但是正如我在測試/ TDD培訓中所經歷的那樣,它使Mockito的學習(使用)曲線變得更加陡峭。
當然,有一些技巧,例如默認情況下對Mockito類使用星號導入以減少所需的擊鍵次數,但是如果您在項目中使用Java 8(希望是您的大多數),則有一種更簡單的方法來應對它。
靜態無進口方式
Mockito-Java8 2.0.0(及其對應的Mockito 1.10.x –版本1.0.0)引入了一組接口,這些接口提供了Mockito API的所有方法。 通過在測試類中“實現”它們,所有這些方法都可以在書面測試中自動直接訪問:
//no static imports needed!public class SpaceShipTest implements WithBDDMockito {@Testpublic void shouldVerifyMethodExecution() {//givenTacticalStation tsSpy = spy(TacticalStation.class);willDoNothing().given(tsSpy).fireTorpedo(2);//whentsSpy.fireTorpedo(2);tsSpy.fireTorpedo(2);//thenthen(tsSpy).should(times(2)).fireTorpedo(2);} }該代碼看起來與上一片段完全相同,但是不需要進行任何靜態導入(除了WithBDDMockito本身的常規導入之外)。
在WithBDDMockito接口實現非常簡單。 所有方法都是默認方法,它們僅委托給BDDMockito類中的適當靜態方法。
default <T> BDDMockito.BDDMyOngoingStubbing<T> given(T methodCall) {return BDDMockito.given(methodCall); }Mockito的味道
Mockito方法由3個基本接口提供,它們是給定方法集的入口點:
- WithBDDMockito –以BDD樣式存根/ WithBDDMockito API(還提供經典API)。
- WithMockito –經典的存根/ WithMockito API
- WithAdditionalMatchers –其他Mokcito匹配器(基本帳戶包含在With(BDD)Mockito中)
摘要
Java 8為如何以更緊湊和可讀的方式編寫(測試)代碼開辟了新的機遇。 靜態導入免費的Mockito代碼可以稍微簡化編寫測試,但是Mockito-Java8中已經提供了更多功能,Mockito 3.0中甚至包含了更多功能(必須以非向后兼容的方式修改Mokcito內部的功能) 。 過多地了解如何重構代碼/項目以從Java 8中受益,您可以看到我的簡短演示“ Java 8為測試帶來了力量!” ( 幻燈片和視頻 )。
Mockito-Java8 2.0.0-beta(適用于Mockito> = 2.0.22-beta)和1.0.0-beta(適用于Mockito 1.10.x和Mockito 2的早期beta)可通過Maven Central獲得 。 這些版本應該相當穩定,但是我希望獲得更多有關此新功能的反饋,因此將其標記為Beta。 可以在項目網頁上找到更多詳細信息。
致謝 。 這個想法最初是David Gageot( Infinitest的幕后人物)在他的一篇博客文章中提出的 。
翻譯自: https://www.javacodegeeks.com/2015/12/using-mockito-without-static-imports-java-8.html
mockito 靜態
總結
以上是生活随笔為你收集整理的mockito 静态_在Java 8中使用不带静态导入的Mockito的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装linux分区详解图文(安装 lin
- 下一篇: java 拼图_拼图推迟将Java 9的