[英]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.