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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用JUnit 5在Mockito中方便地进行模拟–官方方式

發(fā)布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用JUnit 5在Mockito中方便地进行模拟–官方方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從版本2.17.0開始,如果使用JUnit 5, Mockito提供了官方(內置)支持來管理模擬生命周期。

入門

為了利用該集成,需要在JUnit 5的junit-platform-engine旁邊添加Mockito的mockito-junit-jupiter依賴項(有關詳細信息,請參見下文)。

之后, MockitoException為JUnit 5啟用新的Mockito擴展MockitoException 。 這就足夠了。 所有的Mockito注釋都應自動開始工作。

import org.junit.jupiter.api.Test; //do not confuse with 'org.junit.Test'! //other imports import org.mockito.junit.jupiter.MockitoExtension;@ExtendWith(MockitoExtension.class) class SpaceShipJUnit5Test {@InjectMocksprivate SpaceShip spaceShip;@Mockprivate TacticalStation tacticalStation;@Mockprivate OperationsStation operationsStation;@Testvoid shouldInjectMocks() {assertThat(spaceShip).isNotNull();assertThat(tacticalStation).isNotNull();assertThat(operationsStation).isNotNull();assertThat(spaceShip.getTacticalStation()).isSameAs(tacticalStation);assertThat(spaceShip.getOperationsStation()).isSameAs(operationsStation);} }

很好的是,測試類和測試方法都不再需要公開了。

請注意 。 在類路徑上(例如,通過junit-vintage-engine )還具有JUnit 4來進行測試的“舊版”部分,因此不要將org.junit.jupiter.api.Test與舊的org.junit.Test混淆是很重要的。 不起作用。

存根和驗證

如果由于某些原因您不喜歡AssertJ(盡管我鼓勵您至少嘗試一下),則JUnit 5提供了一個本地斷言assertThrows (與AssertJ中的assertThatThrownBy()非常相似)。 在斷言失敗的情況下,它提供了有意義的錯誤消息。

@Test void shouldMockSomething() {//givenwillThrow(SelfCheckException.class).given(tacticalStation).doSelfCheck(); //void method "given..will" not "when..then" cannot be used//whenExecutable e = () -> spaceShip.doSelfCheck();//thenassertThrows(SelfCheckException.class, e); }

我不是我自己,如果我在這里不提及在AssertJ和嘲笑java8中可用的接口中利用對默認方法的支持,可以使很多靜態(tài)導入變得多余。

@ExtendWith(MockitoExtension.class) class SpaceShipJUnit5Test implements WithAssertions, WithBDDMockito {... }

調整默認行為

還需要指出的是,默認情況下,使用JUnit 5擴展Mockito可以在“嚴格模式”下使用 。 這意味著,例如,不必要的存根將使測試失敗。 雖然通常是代碼氣味,但在某些情況下需要測試構造。 要更改默認行為,可以使用@MockitoSettings批注。

@ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.WARN) class SpaceShipJUnitAdvTest implements WithAssertions, WithBDDMockito {.... }

依存關系

正如我已經(jīng)提到的,要開始使用它,需要在JUnit 5的junit-platform-engine旁邊添加Mockito的mockito-junit-jupiter依賴項。 在Gradle構建中,它可能類似于:

dependencies {testCompile 'org.junit.vintage:junit-platform-engine:5.1.0'testCompile 'org.mockito:mockito-junit-jupiter:2.17.2' //mockito-core is implicitly addedtestCompile 'org.junit.vintage:junit-vintage-engine:5.1.0' //for JUnit 4.12 test execution, if neededtestCompile 'org.assertj:assertj-core:3.9.1' //if you like it (you should ;) ) }

請注意 。 由于我在寫這篇博客文章時發(fā)現(xiàn)通過構造函數(shù)將模擬注入最終字段中的錯誤 ,因此建議至少使用2.17.2版本而不是2.17.0版本。 該“開發(fā)”版本在Maven Central中不可用,必須添加額外的Bintray存儲庫。

repositories {mavenCentral()maven { url "https://dl.bintray.com/mockito/maven" } //for development versions of Mockito }

另外,如果不對Gradle 4.6+中的 JUnit 5測試執(zhí)行使用全新的本機支持,那將是一種浪費。

test {useJUnitPlatform() }

自2016.2起,IntelliJ IDEA就提供了JUnit支持(當時的JUnit 5里程碑2)。 Eclipse Oxygen最近似乎也增加了對JUnit 5的支持 。

摘要

在Mockito中具有對JUnit 5的本機支持真的很好。 沒有取得成功,仍在不斷進行改進。
該功能由Christian Schwarz實現(xiàn),并由Tim van der Lippe在其他一些人的大力協(xié)助下進行了完善。

源代碼可從GitHub獲得 。

翻譯自: https://www.javacodegeeks.com/2018/03/convenient-mocking-in-mockito-with-junit-5-the-official-way.html

總結

以上是生活随笔為你收集整理的使用JUnit 5在Mockito中方便地进行模拟–官方方式的全部內容,希望文章能夠幫你解決所遇到的問題。

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