是否可以两次调用方法,首先调用实际的实现,然后模拟结果?

时间:2017-05-22 20:53:10

标签: java mockito

我试图测试一个递归方法正确地重新curses。 因此,第一次通话应callRealMethod。但第二个调用只是为了验证它是否被调用,并且实际上不应该进行调用,而是应该返回一个存根结果。

Mockito有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

您只需使用thenCallRealMethod,然后使用常规thenReturn存根:

import org.junit.Test;

import static org.mockito.Mockito.*;

public class PartialMock {
    String doIt() {
        return "original";
    }

    @Test
    public void testDoIt() {
        PartialMock t = mock(PartialMock.class);
        when(t.doIt())
                .thenCallRealMethod()
                .thenReturn("mocked");

        assertEquals("original", t.doIt());
        assertEquals("mocked", t.doIt());
        assertEquals("mocked", t.doIt());
        verify(t, times(3)).doIt();
    }
}