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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito

發布時間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mockito-Java8是一組Mockito附加組件,它們利用Java 8和lambda表達式使Mockito的模擬更加緊湊。

在2015年初,我進行了簡短的演講, Java 8為測試帶來了力量! 我在GeeCON TDD 2015和DevConf.cz 2015上發表了演講。在我使用4個示例的演講中,我展示了Java 8(即lambda表達式)如何簡化測試工具和總體上的測試。 這些工具之一就是Mokcito。 為了不讓我的PoC代碼死在幻燈片上并使之簡單地供他人使用,我發布了一個小項目,其中有兩個在特定情況下非常有用的Mockito Java 8附加組件。

快速介紹

作為前提,我們假設我們具有以下數據結構:

@Immutable class ShipSearchCriteria {int minimumRange;int numberOfPhasers; }

該庫提供了兩個附加組件:

Lambda匹配器 –允許在lambda表達式中定義匹配器邏輯。

given(ts.findNumberOfShipsInRangeByCriteria(argLambda(sc -> sc.getMinimumRange() > 1000))).willReturn(4);

ArgumentCaptor – Java 8版本 –允許在一行中使用ArgumentCaptor (此處與AssertJ一起使用):

verify(ts).findNumberOfShipsInRangeByCriteria(assertArg(sc -> assertThat(sc.getMinimumRange()).isLessThan(2000)));

Lambda匹配器

借助靜態方法argLambda將創建一個lambda匹配器實例,該實例可用于在lambda表達式(此處用于存根)中定義匹配器邏輯。 當使用復雜的類作為參數傳遞時,它可能特別有用。

@Test public void shouldAllowToUseLambdaInStubbing() {//givengiven(ts.findNumberOfShipsInRangeByCriteria(argLambda(sc -> sc.getMinimumRange() > 1000))).willReturn(4);//expectassertThat(ts.findNumberOfShipsInRangeByCriteria(new ShipSearchCriteria(1500, 2))).isEqualTo(4);//expectassertThat(ts.findNumberOfShipsInRangeByCriteria(new ShipSearchCriteria(700, 2))).isEqualTo(0); }

相比之下,使用Java 7中的自定義Answer實現的邏輯相同:

@Test public void stubbingWithCustomAsnwerShouldBeLonger() { //old way//givengiven(ts.findNumberOfShipsInRangeByCriteria(any())).willAnswer(new Answer<Integer>() {@Overridepublic Integer answer(InvocationOnMock invocation) throws Throwable {Object[] args = invocation.getArguments();ShipSearchCriteria criteria = (ShipSearchCriteria) args[0];if (criteria.getMinimumRange() > 1000) {return 4;} else {return 0;}}});//expectassertThat(ts.findNumberOfShipsInRangeByCriteria(new ShipSearchCriteria(1500, 2))).isEqualTo(4);//expectassertThat(ts.findNumberOfShipsInRangeByCriteria(new ShipSearchCriteria(700, 2))).isEqualTo(0); }

甚至Java 8和可讀性較差的構造也無濟于事:

@Test public void stubbingWithCustomAsnwerShouldBeLongerEvenAsLambda() { //old way//givengiven(ts.findNumberOfShipsInRangeByCriteria(any())).willAnswer(invocation -> {ShipSearchCriteria criteria = (ShipSearchCriteria) invocation.getArguments()[0];return criteria.getMinimumRange() > 1000 ? 4 : 0;});//expectassertThat(ts.findNumberOfShipsInRangeByCriteria(new ShipSearchCriteria(1500, 2))).isEqualTo(4);//expectassertThat(ts.findNumberOfShipsInRangeByCriteria(new ShipSearchCriteria(700, 2))).isEqualTo(0); }

Argument Captor – Java 8版本

靜態方法assertArg創建一個參數匹配器,該實現器內部使用ArgumentMatcher并在lambda表達式中提供一個斷言。 下面的示例使用AssertJ提供有意義的錯誤消息,但是可以使用任何斷言(例如來自TestNG或JUnit的本地聲明)(如果確實需要)。 這允許內聯ArgumentCaptor:

@Test public void shouldAllowToUseAssertionInLambda() {//whents.findNumberOfShipsInRangeByCriteria(searchCriteria);//thenverify(ts).findNumberOfShipsInRangeByCriteria(assertArg(sc -> assertThat(sc.getMinimumRange()).isLessThan(2000))); }

與經典方式的3行相比:

@Test public void shouldAllowToUseArgumentCaptorInClassicWay() { //old way//whents.findNumberOfShipsInRangeByCriteria(searchCriteria);//thenArgumentCaptor<ShipSearchCriteria> captor = ArgumentCaptor.forClass(ShipSearchCriteria.class);verify(ts).findNumberOfShipsInRangeByCriteria(captor.capture());assertThat(captor.getValue().getMinimumRange()).isLessThan(2000); }

摘要

所呈現的附加組件是作為我的會議演講的PoC創建的,但是應具有完全的功能,并在特定情況下可能有用。 要在您的項目中使用它,只需使用Mockito 1.10.x或2.0.x-beta,將mockito-java8作為依賴項添加mockito-java8 ,并且當然可以使用Java 8+編譯您的項目。

  • 可在項目網頁上找到更多詳細信息: https : //github.com/szpak/mockito-java8

翻譯自: https://www.javacodegeeks.com/2015/07/more-compact-mockito-with-java-8-lambda-expressions-and-mockito-java8-add-ons.html

總結

以上是生活随笔為你收集整理的带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年人三级视频 | 午夜痒痒网 | 日本a级网站 | 玖玖精品 | 国内自拍第二页 | 理论片在线观看视频 | 百合sm惩罚室羞辱调教 | 91国内产香蕉| 久久久精品免费视频 | 亚洲国产aⅴ精品一区二区的游戏 | 九九热在线视频 | 炕上如狼似虎的呻吟声 | 国产精品毛片一区二区 | 小早川怜子久久精品中文字幕 | 国产内射合集颜射 | 狠狠干人人干 | 黑人精品无码一区二区三区AV | 26uuu亚洲国产精品 | 亚洲aaa级| 国产91国语对白在线 | 亚洲激情欧美激情 | 日韩影视在线 | 成人毛片在线观看 | 日本japanese极品少妇 | 日韩中文字幕在线免费观看 | 欧美性潮喷xxxxx免费视频看 | 免费的黄色一级片 | 欧美亚洲一区二区三区 | 日韩av一区二区在线播放 | 人人爽人人爽人人爽人人爽 | 丰满雪白极品少妇流白浆 | 欧美怡红院一区二区三区 | 午夜不卡影院 | 人妻毛片| 三级黄色生活片 | 黄色视屏免费 | 91丨九色丨丰满人妖 | 国产成人综合视频 | 91高跟黑色丝袜呻吟动态图 | 在线免费观看毛片 | 99久久免费看精品国产一区 | 姐姐的秘密韩剧免费观看全集中文 | 波多野结衣影片 | 亚洲人交配视频 | 91亚洲精品在线 | 福利视频导航网 | 人妻奶水人妻系列 | 国产福利在线 | 久久深夜视频 | 亚洲欧美乱综合图片区小说区 | 久久精品视频在线观看 | 成人免费毛片观看 | 成人免费在线小视频 | 欧美激情亚洲激情 | 亚洲爱爱网站 | 窝窝午夜看片 | 亚洲综合不卡 | 538国产精品一区二区免费视频 | 欧美不卡三区 | 久久久久久美女 | 日本免费网站在线观看 | 又粗又猛又爽又黄的视频 | 热播之家 | 亚洲人妻电影一区 | 国产成人免费视频网站 | 免费色网站 | 欧美色xxxx | 欧美性xxxxx极品少妇 | 亚洲天天看 | 日本三级片在线观看 | aaa影院| 黄色动漫在线观看 | 久久久www成人免费精品 | 波多野结衣在线免费观看视频 | 国产女人在线观看 | 成年人av网站| 无码国产精品一区二区高潮 | 国产精品久久久久久久免费看 | 亚洲资源网 | av黄色片在线观看 | 天堂网视频在线观看 | 五月激情站 | 国产l精品国产亚洲区久久 午夜青青草 | 日本少妇一区二区三区 | 国产高清精品软件丝瓜软件 | 成人永久免费 | 清纯唯美亚洲 | 九九天堂网 | 色中色在线视频 | 福利社午夜影院 | 91麻豆精品国产91久久久更新时间 | 水多多在线| 国av在线| 亚洲婷婷网 | aa一级视频| 日韩久久高清 | 日本高清不卡视频 | 高清国产在线观看 | 中文字幕视频二区 |