thenCallRealMethod 可以用来重置 spy 对象的特定方法特定参数调用。
示例:
import org.junit.Assert;
import org.junit.Test;
import static org.mockito.Mockito.*;
public class MockitoDemo {
static class ExampleService {
public int add(int a, int b) {
return a+b;
}
}
@Test
public void test() {
ExampleService exampleService = spy(new ExampleService());
// spy 对象方法调用会用真实方法,所以这里返回 3
Assert.assertEquals(3, exampleService.add(1, 2));
// 设置让 add(1,2) 返回 100
when(exampleService.add(1, 2)).thenReturn(100);
when(exampleService.add(2, 2)).thenReturn(100);
Assert.assertEquals(100, exampleService.add(1, 2));
Assert.assertEquals(100, exampleService.add(2, 2));
// 重置 spy 对象,让 add(1,2) 调用真实方法,返回 3
when(exampleService.add(1, 2)).thenCallRealMethod();
Assert.assertEquals(3, exampleService.add(1, 2));
// add(2, 2) 还是返回 100
Assert.assertEquals(100, exampleService.add(2, 2));
}
}