很多人在開始編寫代碼之前都會談論爲代碼編寫測試。這種做法通常稱爲測試驅動開發或TDD。通過這種方式編寫軟件我可以獲得哪些好處?我如何開始這種做法?爲什麼我應該練習測試驅動開發,我應該如何開始?
回答
有很多的好處:
- 你得到即時反饋如果你的代碼正在工作,所以你可以更快地發現錯誤
- 通過看到測試從紅色變爲綠色,你知道你有一個工作迴歸測試和工作代碼
- 你有信心重構現有的代碼,這意味着你可以清理代碼而不用擔心它會破壞什麼
- 在你到底有沒有迴歸測試套件,可以自動在運行構建,給你更多的信心,你的代碼是固體
最好的方式開始是剛剛開始。所有關於測試驅動開發都有很好的book by Kent Beck。從新代碼開始,不要擔心舊代碼......只要您覺得需要重構一些代碼,爲現有功能編寫測試,然後重構它,並確保測試保持綠色。另外,請閱讀this great article。
到最後一篇文章(單元測試技巧)的鏈接已過期。這裏是鏈接到新的文章:http://devver.wordpress.com/2008/07/07/tips-for-unit-testing/ – 2010-06-30 19:56:48
好處部分有recently been covered,至於從哪裏開始......在小型企業系統中,沒有太多未知因素,所以風險很低。如果您還不知道測試框架(如NUnit),請先學習一下。否則,從編寫你的第一個測試開始:)
鏈接已損壞! – 2016-11-08 11:27:58
在我看來,最重要的事情是,它明確允許你看看你的代碼是否按照它應該做的。這似乎是顯而易見的,但它是超級容易,不管你本來的目標誤入歧途運行,因爲我已經在過去的發現:對
優勢
- 你弄清楚如何劃分你的代碼
- 你希望你的代碼做什麼你找出
- 你知道應該如何行事,並在路上,如果重構破壞任何東西
- 讓你養成習慣,確保你的代碼總是知道它應該做什麼
快速入門
只要做到這一點。爲你想要做的事寫一個測試用例,然後編寫應該通過測試的代碼。如果你通過測試,那麼很好,你可以繼續寫代碼總是失敗的例子(例如2 + 2不應該等於5)。
一旦你所有的測試通過,寫你的實際業務邏輯來做你想做的事情。
如果您從頭開始,請確保您找到一個易於使用的良好測試套件。我喜歡PHP,所以PHPUnit或SimpleTest運行良好。幾乎所有流行的語言都有一些xUnit測試套件可用於幫助構建和自動化測試。
好首發: Getting Started with Tdd in Java using Eclipse by Brett L. Schuchert
是一家集Java和C#關於TDD的截屏。它從TDD的草稿和教學基礎開始。
您可能正在敏捷或瀑布環境中工作。也許你有明確的程序,經過多年努力,經過了戰鬥測試,或者你剛開始創業。無論什麼樣的情況是,你可能面臨至少一個,如果不是更多,下面痛苦,問題,或導致未成功交付:
在創建過程中你的團隊的- 部分保持圈外的要求,規格或用戶故事
- 大多數,如果不是全部,你的測試是手動的,或者你沒有測試所有
- 即使你進行自動化測試,他們沒有發現真正的問題
- 當他們爲項目提供實際價值已爲時已晚時,自動化測試將被編寫並執行
- 總有一些比奉獻的時間來測試
- 團隊更迫切測試,開發和功能分析部門之間的分裂,他們往往不同步
- 無力的重構,因爲恐懼代碼東西將被打破
- 維護成本太高
- 的時間到市場太大
- 客戶端不覺得什麼是交付的是什麼,他們問
- 文檔是永遠保持最新
- 你害怕部署到生產環境,因爲結果是未知
- 你往往是不能夠部署到生產環境,因爲迴歸測試花費太多時間試圖找出花費太長的時間來運行
- 球隊帶來什麼某些方法或類別
測試驅動開發不會神奇地解決所有這些問題。相反,它使我們走上了尋求解決方案的道路。沒有銀彈,但如果有一種開發實踐可以在如此多的層面上有所作爲,那麼這種實踐就是TDD。測試驅動的開發加快了上市時間,使得重構更容易,有助於創建更好的設計,並促進更寬鬆的耦合。在直接利益的頂端,TDD是許多其他實踐的先決條件(連續交付是其中之一)。更好的設計,精心編寫的代碼,更快的上市時間,最新的文檔和可靠的測試覆蓋率,是您通過應用TDD可以實現的一些結果。
- 1. ABAP。我應該下載什麼來開始練習?
- 2. 爲什麼我們應該從TDD的失敗測試開始?
- 3. 什麼時候應該選擇測試驅動開發?
- 4. 開發JavaScript - 我應該什麼時候開始進行單元測試?
- 5. 我應該測試什麼?
- 6. 我應該什麼時候開始學習Qt?
- 7. 我應該如何開始編寫設備驅動程序?
- 8. 我應該如何開始設備驅動程序
- 9. 我應該如何開始一個新的JavaScript項目(測試,開發,構建)?
- 10. 我該如何開始學習jquery
- 11. 我應該嘗試瞭解教程還是應該從頭開始學習?
- 12. 我應該學習如何開發Chrome應用程序?
- 13. 我應該如何開始使用neo4j?
- 14. 我應該如何開始使用Iphone?
- 15. 何時/爲什麼我應該開始使用數據庫?
- 16. 我應該如何開始學習ADO.NET實體框架?
- 17. 我想學習Android開發,我該從哪裏開始?
- 18. 我應該如何測試?
- 19. 我應該從哪裏開始爲Mac開發?
- 20. 開始爲Android開發,我應該選擇安裝哪些SDK?
- 21. 我現在應該開始開發Facebook應用程序嗎?
- 22. 我應該從哪裏開始開發windows phone應用程序
- 23. 我應該寫什麼樣的測試?
- 24. 我應該測試什麼? PhpUnit
- 25. 我們還應該爲MSIE7開發嗎?
- 26. 測試 - >代碼 - >重構,我們應該什麼時候開始重構?
- 27. 爲什麼應該從0開始而不是從1開始?
- 28. 我應該爲學習asp.net開發哪個網站?
- 29. 我應該爲Web開發學習哪些新技術?
- 30. 開始Android開發之前我應該學習哪些設計模式
請查看我對已經問過的同一問題的回答。 [詳細解答此問題](http://stackoverflow.com/questions/62625/how-do-you-know-what-to-test-when-writing-unit-tests#69259) – eroijen 2008-09-16 04:06:41
我遲到了在這裏,但我想把我的字節。練習TDD的最佳方法是使用Katas。這裏有很好的測試卡塔斯:https://github.com/garora/TDD-Katas – 2015-06-26 14:14:44