2012-02-16 69 views
2

我有一個相當大的MVC3應用程序,其中我已經開發了一個小的第一階段,沒有編寫任何單元測試,目標是特別檢測重構引起的迴歸等問題。我知道這樣說有點不負責任,但到目前爲止,並沒有真正需要這麼做,只需進行非常簡單的CRUD操作,但我希望能夠繼續採用TDD方法。如何將現有MVC3應用程序的開發轉換爲TDD方法?

我已經基本完成了第一階段,我已經寫了行動和視圖,其中成員可以註冊爲作者並創建課程模塊。現在我有更復雜的階段來實施課程的消費者和他們的受訓者必須註冊並完成課程,學術進展跟蹤,作者反饋和財務影響。我覺得如果沒有一個穩定的單元測試策略是不明智的,根據以往的經驗,我認爲TDD將非常適合我未來在這裏的開發工作。

是否有已知的程序將開發工作「轉換」爲TDD,並將單元測試引入已編寫的代碼?我不需要幼兒園一步一步的東西,而是一般的戰略指導。

順便說一句,我已經在這個問題上包含了web開發和MVC標籤,因爲我相信這些開發領域可以對項目文物的單元測試需求產生重大影響。如果您不同意並希望刪除其中的任何內容,請發表評論,說出原因。

+0

TDD是關於設計驅動開發的,與單元測試不一樣。請參閱http://bradwilson.typepad.com/blog/2009/04/its-not-tdd-its-design-by-example。html爲您現有的代碼和所有新的計劃代碼編寫單元測試使用TDD(設計示例) – RickAndMSFT 2012-02-17 05:34:33

+0

@ Rick.Anderson-at-Microsoft.com,謝謝,但我明白其中的差異。 TDD確實使用單元測試作爲開發的驅動因素,TDD和單元測試都是我的問題的一部分。 – ProfK 2012-02-17 08:59:24

+0

@ Rick.Anderson-at-Microsoft.com我將堅持TDD的原意,即「測試驅動開發」。我在XP團隊工作了好幾年。我們對此進行了很多討論,並意識到在某些情況下,系統的大部分更改不是新代碼,而是修改現有代碼。 TDD在這裏同樣重要。 TDD經常產生單元測試,因爲人們通常會嘲笑依賴來測試代碼單元。 TDD確認了一個設計(這在你的腦海中)。由於TDD,您不一定擁有良好的設計。我不會將TDD的過程與設計的過程混淆。 – bloudraak 2012-02-17 18:48:11

回答

3

我不知道任何現有的程序,但我可以強調我通常做什麼。

對於現有系統,我的做法是先嚐試編寫測試以重現缺陷,然後修改代碼以修復它。我說的是嘗試,因爲不是所有的東西都能以具有成本效益的方式重現。例如,試圖編寫一個測試來重現與IE3特定版本的IE瀏覽器相關的CSS3轉換問題可能會很酷,但不能很好地利用您的時間。我通常會給自己一個寫這樣的測試的最後期限。唯一的例外可能是高度重視或難以手動測試的功能(如API)。

對於添加任何新功能,首先編寫測試程序(好像被測類是API),驗證測試失敗,並實現該功能,以滿足測試。重複。完成該功能後,請運行它,如PEX。它往往會突出你從未想過的事情。明白需要解決哪些問題。

對於現有的代碼,我將使用代碼覆蓋範圍來幫助我查找我沒有測試過的功能。我將代碼註釋掉,編寫測試(失敗),取消註釋代碼,驗證測試通過並重復。如果需要,我會重構代碼以簡化測試。 PEX也可以提供幫助。

密切關注疼痛點,因爲它突出了應該重構的區域。例如,如果您的控制器直接使用ObjectContext/IDbCommand/IDbConnection進行數據訪問,則可能會發現您需要配置數據庫才能測試業務條件。這是我的暗示,我需要一個數據訪問層的接口,所以我可以模擬它並在我的控制器中模擬這些業務條件。這同樣適用於註冊表訪問等等。

但要明白你寫的測試。 TDD的價值在某些時候會降低,編寫這些測試的成本可能要比給印度某人手動測試的成本要高。

+0

好的,謝謝。儘管我的客戶比印度的人更便宜。每次我完成一次衝刺時,我都必須爲他提供一份UAT檢查表。 – ProfK 2012-02-17 09:14:04

相關問題