2011-04-23 64 views
1

jMock中mocks和stubs有什麼區別?我可以用jMock創建兩個?我怎麼能用它創建存根,以及什麼情況最適合這個,我相信使用存根就是當我需要準備一些測試狀態的時候。mock和stub(JMock)有什麼區別

謝謝

回答

1

摩卡是一個傳統的嘲笑圖書館非常在JMock模具。 Stubba是Mocha的一個獨立部分,允許在真實(非模擬)類上嘲諷和存根方法。它通過將感興趣的方法移到一邊,添加一個新的方法代表傳統模擬對象的新版本。您可以使用此模擬對象來設置存根返回值或設置要調用的方法的期望值。測試完成後,該方法的殘留版本將被刪除並替換爲原始文件。

的更詳細的例子

http://jamesmead.org/blog/2006-09-11-the-difference-between-mocks-and-stubs

+0

感謝非常好的鏈接。 – elf 2011-04-23 19:56:27

2

維基百科有一個article regarding Mock objects,但是術語沒有可能是好解釋的。我們曾經做過這樣的區分(當然這可能需要討論):

模擬和存根都模擬測試組件所需的對象。

當你想斷言被測組件和被嘲諷物體之間發生特定類型的相互作用時,會使用「mock」這個詞。這就是爲什麼模擬框架(如EasyMock)提供方法來斷言所有預期的調用實際上已經執行的原因。例如,你想看到你的服務實際上調用(模擬)DAO。所以這個調用是你的測試條件/斷言的一部分。

但是,當您僅僅試圖提供幫助測試組件的實現時,會使用「存根」這個詞。什麼樣的交互發生並不重要,你只需要存根填補空白,以便測試你的組件。您的重點在於測試的組件以及它的功能。

因此,對於同樣的事情,這只是兩個詞,取決於你試圖用它來實現什麼。

0

我們通常會區分查詢和操作。查詢不會改變模擬對象之外的世界狀態 - 我們可以稱它爲一次或五次。如果您已經完成了Design by Contract設計,它們就像是先決條件。

操作改變了外界(例如減去一個值),並且我們爲這些指定了模擬。這很重要,我們稱之爲模擬,因爲結果會有所不同。這些就像後置條件。

存根查詢,模擬操作。