是否需要在使用 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
?
当我们没有定义调用模拟对象的方法时会发生什么?
任何 happens.Mocking 都不够,因为调用的不是真正的 class/method,而是模拟的。
如果您监视了实例,那将触发真正的方法调用。只有这样,您才会考虑使用 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());
}
我正在使用 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
?
当我们没有定义调用模拟对象的方法时会发生什么?
任何 happens.Mocking 都不够,因为调用的不是真正的 class/method,而是模拟的。
如果您监视了实例,那将触发真正的方法调用。只有这样,您才会考虑使用 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());
}