簡體   English   中英

是否需要在使用 Mockito 模擬的對象上定義 doNothing()/when()

[英]Is it required to define doNothing()/when() on Objects mocked using Mockito

我正在使用 JUnit5 和 Mockito 為 class Main.java編寫單元測試。

依賴 class ExternalApi.java被注入Main.java

這是我的MainTest.java

@ExtendWith(MockitoExtension.class)
public class MainTest {
    @InjectMocks
    Main main;

    @Mock
    ExternalApi externalApi;

    @Test
    void testAbcMethod() {

    }
}

Main.java中的 abc() 方法調用externalApi.doSomething()來做一些事情。

我不希望在我的測試中調用這個原始的 externalApi 方法。 我需要定義嗎

doNothing().when(externalApi).when(doSomething());

還是僅僅模擬ExternalApi就足夠了?

如果我們沒有定義調用模擬對象的方法時會發生什么,會發生什么?

如果我們沒有定義調用模擬對象的方法時會發生什么,會發生什么?

什么都沒發生。 Mocking 就足夠了,因為它不是被調用的真正的類/方法,而是被模擬的類/方法。

如果您監視了該實例,那將觸發真正的方法調用。 只有這樣,您才會考慮使用doNothing來使方法行為靜音。


@Test
public void whenNotDefineBehaviorOnMock_thenCorrect() {
    List mockList = Mockito.mock(ArrayList.class);
    
   // No behavior defined,
    mockList.add("one");
    Mockito.verify(mockList).add("one");
   // Size is still empty
    assertEquals(0, mockList.size());

   // Behavior defined
    Mockito.when(mockList.size()).thenReturn(100);
    assertEquals(100, mockList.size());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM