2010-11-26 64 views

回答

4

你可能確實開始寫B測試,並儘快實現B中你知道你需要它,然後回到A.但是當你回到A時,你可能想要使用B的模擬,以便你對A的測試真的是測試A以及它與B的交互。

部分原因是B可能會用另一個C類來完成它的一些工作。如果你想用真實的B來測試A,你還需要C,當然這個難度可以進一步擴大。

使用嘲笑你可以只有一個呼叫B方法測試檢查時,它應該與響應的交易正常,你告訴你的模擬給予,而不是依賴於實際的實現B.

1

的的模擬對象的概念是A的測試不應該依賴於B的測試(這就是爲什麼它被稱爲「單元」測試 - 你在獨立的獨立單元中測試代碼)。如果A使用B,那麼很難測試A是否正常工作,而不依賴於B的工作權 - 除非用一些知道對「正確」請求給出「正確」響應的「模擬」對象替換B,並檢測「錯誤」要求。這樣,如果有什麼東西打破你知道這是A錯了,而不是B。 至於開發,它有時可能發生,你還不知道B究竟是如何實現的 - 例如,B是一個Web服務的接口您還不完全瞭解詳細信息,但是您希望開始在A中開發您的業務邏輯,現在您不在乎如何調用webservice的登錄參數或以何種格式接受參數。然後你可以創建「模擬」B,讓A解決,然後獨立地添加B.這也會讓B更容易支持其他格式等等 - 因爲您從一開始就以足夠通用的方式編寫它,以便將細節抽象出來。

2

更好地學習如何使用嘲弄和一般TDD我建議你NAT普賴斯博客和他的書http://www.natpryce.com/

一般來說它不使用太多的嘲弄一個好主意。當你必須隔離你的應用程序層(db和view)或者外部(慢)系統時使用它們。

寫入模擬可能會讓您的測試難以閱讀,所以最好不要濫用它們。

0

模擬對象是一個有趣的想法,但它們與單元測試的概念相沖突。如果A類使用B類,那麼它實際上是在A類和B類中集成了邏輯。在這種情況下,A類不是單元測試的候選對象,而是集成測試的候選對象。許多所謂的TDD專家認爲,單元測試只適用於某些類,而不是全部類。