參考:http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html
當我們對@Mock的類(@Mock private OrderDao dao;)進行模擬方法時,會像下面這樣去做:
when(dao.getOrder()).thenReturn("returened by mock "); // 或者使用更爲推薦的given方法
但如果想對@Spy的類(@Spy private PriceService ps;)進行模擬方法時,需要像下面一樣去做:
doReturn("twotwo").when(ps).getPriceTwo();
原因:
使用@Mock生成的類,所有方法都不是真實的方法,而且返回值都是NULL。
使用@Spy生成的類,所有方法都是真實方法,返回值都是和真實方法一樣的。
所以,你用when去設置模擬返回值時,它裏面的方法(dao.getOrder())會先執行一次。
使用doReturn去設置的話,就不會產生上面的問題,因爲有when來進行控制要模擬的方法,所以不會執行原來的方法。