據我所知,從極限編程和單元測試中,測試必須由另一個開發人員在另一個開發測試方法之前完成(或者來自相同的開發人員,但測試必須在方法實現之前編寫)。嘲笑還是不嘲笑?
好吧,看起來不錯,我們只需要測試一個方法是否具有良好的行爲,當我給它一些參數。
但理論和實踐之間的區別在於,在理論上不存在但在實踐中有...
的第一次,我試圖測試,我發現它在某些情況下很難由於對象之間的關係。我發現嘲笑的做法,我發現它非常有用,但一些概念讓我懷疑。
首先,嘲諷隱含的說:「你知道該方法如何運行,因爲你必須知道它需要什麼其他對象......」。那麼,從理論上講,這是我的朋友鮑勃寫的測試,他只知道,當我給它「john」字符串時,該方法必須返回true ...這是我使用dao代碼訪問數據庫而不是使用散列表在內存中...
我的可憐的朋友Bob會如何寫測試?他會期待我的工作......
好吧,似乎不是純粹的理論,但無論如何。但是,如果我看看很多模擬框架的文檔,它們允許我測試一個方法被調用的次數和順序! ouch ...
但是,如果我的朋友鮑勃必須測試這種方法,以確保良好的依賴關係,方法必須寫在測試之前,不是嗎?
哼...幫助我的朋友鮑勃...
我們什麼時候停止使用模擬裝置(爲了驗證等)? 當模擬機制有用嗎? 理論,實踐和模擬:什麼是最好的平衡?
儘管如此,Bob需要指定支持測試方法的事實並不令人滿意。事實上,通過指定您所談論的合約,Bob將會定義測試方法的實際實施。那不是他的工作。使用接口並不能真正解決問題。[Komarro](http://code.google.com/p/komarro/)試圖對此問題進行一些改進。看一看... –