日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

在Java 8中使用不带静态导入的Mockito

發(fā)布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Java 8中使用不带静态导入的Mockito 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如何通過在基于Java 8的項目中刪除靜態(tài)導(dǎo)入來簡化Mockito的使用。

基本原理

Mockito API基于(BDD)Mockito類中聚集的靜態(tài)方法(大部分),然后進行非常流暢的鏈接方法調(diào)用。 可以使用模擬/間諜/給定/然后/驗證靜態(tài)方法啟動模擬創(chuàng)建,存根和呼叫驗證:

@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開始,可以使用靜態(tài)導(dǎo)入來簡化代碼,但是要付出額外的靜態(tài)導(dǎo)入的代價:

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); }

導(dǎo)入可以隱藏在IDE中,通常不會造成太大影響。 然而,為了能夠只寫一個沒有類的方法名(例如, mock(TacticalStation.class) ),還是需要按ALT-ENTER(在IntelliJ IDEA中),以便在第一次使用給定方法時添加每個靜態(tài)導(dǎo)入。測試課。 在Eclipse中情況更糟,在Eclipse中, 需要更早地將BDDMockito添加到“ Content Assist”中的“ Favorites”中,以使其由IDE建議。 Eclipse的人可能會說“您必須做一次”,但是正如我在測試/ TDD培訓(xùn)中所經(jīng)歷的那樣,它使Mockito的學(xué)習(xí)(使用)曲線變得更加陡峭。

當(dāng)然,有一些技巧,例如默認情況下對Mockito類使用星號導(dǎo)入以減少所需的擊鍵次數(shù),但是如果您在項目中使用Java 8(希望是您的大多數(shù)),則有一種更簡單的方法來應(yīng)對它。

靜態(tài)無進口方式

Mockito-Java8 2.0.0(及其對應(yīng)的Mockito 1.10.x –版本1.0.0)引入了一組接口,這些接口提供了Mockito API的所有方法。 通過在測試類中“實現(xiàn)”它們,所有這些方法都可以在書面測試中自動直接訪問:

//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);} }

該代碼看起來與上一片段完全相同,但是不需要執(zhí)行任何靜態(tài)導(dǎo)入(除了WithBDDMockito本身的常規(guī)導(dǎo)入之外)。

在WithBDDMockito接口實現(xiàn)非常簡單。 所有方法都是默認方法,它們僅委托給BDDMockito類中的適當(dāng)靜態(tài)方法。

default <T> BDDMockito.BDDMyOngoingStubbing<T> given(T methodCall) {return BDDMockito.given(methodCall); }

Mockito的味道

Mockito方法由3個基本接口提供,它們是給定方法集的入口點:

  • WithBDDMockito – BDD樣式的存根/ WithBDDMockito API(還提供經(jīng)典API)。
  • WithMockito –經(jīng)典的存根/ WithMockito API
  • WithAdditionalMatchers –其他Mokcito匹配器(基本帳戶包含在With(BDD)Mockito中)

摘要

Java 8為如何以更緊湊和可讀的方式編寫(測試)代碼開辟了新的機遇。 靜態(tài)導(dǎo)入的免費Mockito代碼可以稍微簡化編寫測試,但是Mockito-Java8中已經(jīng)提供了更多功能,Mockito 3.0中甚至包含了更多功能(必須以非向后兼容的方式修改Mokcito內(nèi)部的功能) 。 過多地了解如何重構(gòu)代碼/項目以從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獲得 。 這些版本應(yīng)該相當(dāng)穩(wěn)定,但是我希望獲得有關(guān)此新功能的更多反饋,因此將其標(biāo)記為Beta。 可以在項目網(wǎng)頁上找到更多詳細信息。

致謝 。 這個想法最初是David Gageot( Infinitest的幕后人物)在他的一篇博客文章中提出的 。

翻譯自: https://www.javacodegeeks.com/2015/12/using-mockito-without-static-imports-java-8.html

總結(jié)

以上是生活随笔為你收集整理的在Java 8中使用不带静态导入的Mockito的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。