junit mockito_使用JUnit 5在Mockito中方便地进行模拟–官方方式
junit mockito
從版本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 4(例如,通過junit-vintage-engine )進行測試的“舊版”部分,不要將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中可用接口的默認方法的支持,可以使很多靜態導入變得多余。
@ExtendWith(MockitoExtension.class) class SpaceShipJUnit5Test implements WithAssertions, WithBDDMockito {... }調整默認行為
還需要指出的是,默認情況下,使用JUnit 5擴展Mockito可以在“嚴格模式”下使用 。 例如,這意味著不必要的存根將使測試失敗。 盡管通常是代碼氣味,但在某些情況下仍需要測試構造。 要更改默認行為,可以使用@MockitoSettings批注。
@ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.WARN) class SpaceShipJUnitAdvTest implements WithAssertions, WithBDDMockito {.... }依存關系
正如我已經提到的,要開始使用它,需要在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 ;) ) }請注意 。 由于我在寫這篇博客文章時發現通過構造函數將模擬注入最終字段中的錯誤 ,因此建議至少使用2.17.2版本而不是2.17.0版本。 該“開發”版本在Maven Central中不可用,必須添加額外的Bintray存儲庫。
repositories {mavenCentral()maven { url "https://dl.bintray.com/mockito/maven" } //for development versions of Mockito }另外,如果不對Gradle 4.6+中的 JUnit 5測試執行使用全新的本機支持,那將是一種浪費。
test {useJUnitPlatform() }自2016.2起,IntelliJ IDEA就提供了JUnit支持(當時的JUnit 5里程碑2)。 Eclipse Oxygen最近似乎也增加了對JUnit 5的支持 。
摘要
在Mockito中具有對JUnit 5的本機支持真的很好。 沒有取得成功,仍在不斷進行改進。
該功能由Christian Schwarz實現,并由Tim van der Lippe在其他一些人的大力協助下進行了完善。
源代碼可從GitHub獲得 。
翻譯自: https://www.javacodegeeks.com/2018/03/convenient-mocking-in-mockito-with-junit-5-the-official-way.html
junit mockito
總結
以上是生活随笔為你收集整理的junit mockito_使用JUnit 5在Mockito中方便地进行模拟–官方方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何注销域名备案(如何注销域名备案号)
- 下一篇: 养鱼什么意思 养鱼的意思是什么