2011-04-16 126 views
10

我有一個服務器應用程序,我想知道從哪裏開始,如果我想開始實施TDD並使用Moq。使用Moq和TDD,從哪裏開始?

我可以閱讀哪些關於這個主題的好書,哪些不是「網絡導向」?

我對此事的問題,比如:

我應該嘲笑每個對象我想要測試,或只有那些我無法實現,如文本的作家?

我的服務器需要很多設置才能真正做我想測試的任何東西,我應該只是將其填充到[TestInitialize]函數中?

我應該如何鏈接我的測試,如果我想測試更深的功能?

回答

7

我推薦兩本書:Test Driven Development by Example,由Kent Beck。這是關於TDD的一本很好的書,我特別喜歡它,因爲他演示了一個例子,這對於瞭解節奏和思考過程非常有用。另一方面,嘲笑有點輕。爲此,我會閱讀Roy Osherove的The Art of Unit Testing。正如標題所暗示的那樣,它並沒有專門針對TDD,而是關於如何編寫好的單元測試;他對嘲笑和存根有很好的報道。

關於你應該嘲笑的東西,嘲笑的主意是允許你將你正在測試的類/函數與其他環境隔離開來,以便你可以測試它在你控制的虛假環境中的行爲。在這個框架中,你不應該嘲笑這個班,而應該嘲笑這個班。

一個簡單的例子:如果你有一個使用Logger的類,測試類寫入記錄器會非常痛苦,並且可能涉及諸如檢查記錄器是否寫入文本文件等事情。在許多層面上這不是一個好主意 - 首先是你的班級不關心記錄器如何專門做它的工作。在這種情況下,您可以使用假模擬記錄器替換類中的Logger實例,然後您可以驗證您的類是否在適當的時間調用Logger,而不必擔心記錄器的功能。

關於服務器初始化:單元測試通常在內存中,與環境沒有依賴關係,所以如果你正在進行TDD,你可能不需要這樣做。一般來說,單元測試中的太多(任何?)初始化代碼是一個壞跡象。

這表明您正在尋找更多的驗收測試/ BDD樣式測試。我在MSDN雜誌Behavior-Driven Development with SpecFlow and WatiN上推薦了這篇最近的文章;它解釋瞭如何通過一起開發驗證應用程序正在執行用戶需要的高級測試(驗收測試,您將在哪裏運行實際的服務器和應用程序)開發測試優先方式,並且它正在執行通過開發小部分代碼來完成開發者的意圖(單元測試)。

希望這有助於,並開心測試!

+0

爲了完成任何事情,我需要做某些事情,因爲我想測試的東西通常與服務器打開時實例化的某些元素有關。所以我需要執行我的腳本編譯器(構建一個dll幷包含它的程序集),並初始化和配置這些文件(即在相當幾個腳本中調用靜態方法調用) – bevacqua 2011-04-17 00:13:19

+0

+1,特別是對於Osherove的書。很棒的閱讀! – TrueWill 2011-04-17 00:55:18

11

你不要模擬你想測試的對象。如果你這樣做,你正在測試模擬,而不是你的對象!您需要模擬您正在測試的對象的依賴項

5

我最喜歡的TDD書籍之一是Test Driven Development By Example(Kent Beck)。我也非常喜歡他做的4-part screen cast

第1集:入門測試(28分鐘)

在這一集裏,我們採取的第一個測試的第一個特徵樣本應用程序和切片它提供更頻繁的反饋。

第2集:隔離測試(23分鐘)

在這一集裏,我們確保測試不會相互影響。一旦測試被隔離,我們實施幾項新的操作。

第3集:大功能(25分鐘)

在這一集裏,我們採取了大量的功能和切片它提供更頻繁的反饋。最後,我們清理代碼以消除重複,並使代碼更易於閱讀。

第4集:整理(20分鐘)

在這一集裏,我們完成的示例應用程序的功能和對他人使用做好準備。現在在開發中推遲的設計決定現在更清楚了。本系列收集了所有劇集的教訓總結。

1

如果您希望遵循TDD模式,您的代碼應該通過測試的開發進化。你會選擇單一職責,如前面提到的那樣,你正在測試的類有任何依賴關係。通過這種方式,您可以在任何依賴項上設置虛擬數據和預期行爲,而不用擔心它們。

這有一個簡短的介紹:http://www.agiledata.org/essays/tdd.html不幸的是我沒有任何特定的書籍,我可以從個人經驗推薦。

閱讀這也可能是讓你有用開始:http://stephenwalther.com/blog/archive/2008/06/12/tdd-introduction-to-moq.aspx