回答
我挖了一點比這更多,爲什麼這兩種語法存在的答案可以在舊的release notes和引用的mailing list discussion中找到。
首先,在版本1.5(26/07/2008)中添加了doReturn()
,而在版本1.6(21/10/2008)中添加了when()
。執行when()
以取代舊的stub()
方法和doReturn()
以取代stubVoid()
。基本上,這是用的的Mockito的創作者設計deicision(從郵件列表29/06/2008引用):
我從來不喜歡stubVoid()語法,但是這是我能想到的 最好的。該存根語法我現在想實現,如果我再一次的Mockito做:
//經常磕碰:
when(mock.getStuff()).thenReturn("foo");
when(mock.getStuff()).thenThrow(new RuntimeException());
爲無效的方法和一些極端情況//:
doReturn("foo").when(mock).getStuff();
doThrow(new RuntimeException()).when(mock).someMethod();
//用於連續存根:
when(mock.getStuff()).thenReturn("foo").thenThrow(new RuntimeException());
doThrow(new RuntimeException()).thenReturn("foo").when(mock).someMethod();
我提出這句法幾個星期前,但只獲得了單 反饋說,這是相當化妝品(這是真的......)。因此我 決定不更改API。
而且正如Bewusstsein在評論中指出的,when()
提供了類型安全性。如果我們有一個方法String doSomething()
下面的塊都會編譯。後者將在運行時引發異常。
Mockito.doReturn("String").when(mock).doSomething();
Mockito.doReturn(1).when(mock).doSomething();
因此,總而言之,這是一個設計決定,引入兩種嘲笑方式。 when()
因其類型安全性和流暢的閱讀能力而成爲嘲笑的首選方式。 doReturn()
被實現爲允許模擬void
方法和其他角落案例。
- 1. 使用的Mockito
- 2. 測試用的Mockito
- 3. 模擬用的Mockito
- 4. 懲戒用的Mockito
- 5. 用Mockito測試
- 6. 的JUnit用SpringMVC的Mockito 404
- 7. 的JUnit使用的Mockito
- 8. 的Mockito的NullPointerException
- 9. 如何使用的Mockito
- 10. 進樣使用的Mockito
- 11. 磕碰使用的Mockito
- 12. 檢查使用的Mockito
- 13. 用的Mockito newInstance方法
- 14. 使用JUnit和的Mockito
- 15. 如何使用的Mockito
- 16. 如何使用的Mockito
- 17. 嘲諷使用的Mockito
- 18. 用Mockito嘲笑JdbcTemplate的DataSource
- 19. 問題想用的Mockito
- 20. 測試GWTP用的Mockito
- 21. 測試它調用的Mockito
- 22. 如何使用的Mockito
- 23. 使用Mockito和Dagger的SharedPreferences
- 24. 使用Mockito嘲笑
- 25. 用mockito GWT測試
- 26. Mockito通用參數
- 27. 的Mockito UnsatisfiedLinkError
- 28. 的Mockito:爲
- 29. Mockito的麻煩
- 30. 通過的Mockito
可能的重複:http://stackoverflow.com/questions/20353846/mockito-difference-between-doreturn-and-當 – troig
其實我仔細閱讀你的問題。但是,我從來沒有聽說過你所指派的差異(我剛剛注意到這是我的鏈接問題的答案之一)。無論如何,我會等待答案。感謝評論:) – troig
也認爲這是一個重複的問題,你的問題'接受第一個選項'的問題在接受的答案中得到了回答:'當/然後返回給你,有一件事返回/當沒有時,是在編譯時對你返回的值進行類型檢查。# – Bewusstsein