我對仙人掌和模擬對象(jMock,Easy mock)有點困惑。仙人掌與模擬對象(jMock,Easy mock)
任何人都可以請回答以下問題嗎?
- 何時使用仙人掌進行測試?
- 何時不使用仙人掌進行測試?
- 何時使用模擬對象進行測試?
- 何時不使用模擬對象進行測試?
我對仙人掌和模擬對象(jMock,Easy mock)有點困惑。仙人掌與模擬對象(jMock,Easy mock)
任何人都可以請回答以下問題嗎?
那麼,這個問題沒有很大的客觀答案,但模擬對象是關於測試代碼的行爲,但不能告訴你,如果你正在與容器正確交互。
仙人掌在容器中運行你的代碼,所以它實際上更像是一個集成測試,但它告訴你的是你的代碼實際上與容器正確交互(它發送的是合法的,它返回的是真實的)。
所以總結一下,一個模擬告訴你,如果你想要行爲x,你得到了行爲x。仙人掌告訴你,行爲x實際上在容器內獲得了預期的結果。
你使用哪一個取決於你試圖完成的測試。如果你想做更多的TDD,那麼模擬方法就是要走的路。您可以分別進行原型設計,看看您是否足夠了解容器如何編寫代碼,然後進行單元測試,然後進行集成測試/驗收測試以確保一切正常。
但是,如果您正在嘗試進行更多傳統的單元測試,那麼您使用不同值嘗試測試邊緣案例和行爲的代碼時,那麼使用mocks進行測試並不會告訴您,因爲很大一部分容器丟失了。
我目前非常喜歡模擬方法,但是如果我要回到仙人掌,測試容器的不變量會更多,所以如果升級容器,我們知道容器的工作方式沒有什麼重大變化這應該會影響我們的代碼。
何時使用仙人掌進行測試?
對於集成測試(涉及交互與容器)。這是或是仙人掌的甜蜜點。這些測試通常是粗粒度的......並且它們的執行速度不是很快。
何時不使用仙人掌進行測試?
對於除集成測試之外的其他測試(甚至對於集成測試,我已經看了一段時間,因爲我已經看到了Cactus測試)。
何時使用模擬對象進行測試?
當你想單元測試的東西在隔離的依賴的東西。這些測試通常是細粒度的,並且執行速度很快。
何時不使用模擬對象進行測試?
當你想要寫集成測試(即測試交互),功能測試等
的Mock Objects vs In-Container testing頁上的仙人掌網站總結了相當不錯。