測試能夠改進您的設計。進行測試的每個目標對象必須具備至少兩個客戶機:生產代碼和測試用例。這些客戶機強制您對代碼進行解耦。測試還鼓勵開發人員使用更小、更簡單的方法。
測試減少了不必要的代碼。在編寫測試用例時,您養成了很好的測試習慣,即只編寫運行測試用例所需的最少代碼。您抵制住了對功能進行編碼的誘惑,因為您目前還不需要它。
推動了測試優先開發。您編寫的每個測試用例會確定一個小問題。使用代碼解決這個問題非常有用并且可以推動開發。當我進行測試驅動開發時,時間過得飛快。
測試提供了更多的自主權。在使用測試用例捕獲可能的錯誤時,您會發現自己非常愿意對代碼進行改進。
測試驅動的開發和 RSpec
有關測試的優點無需贅述,我將向您介紹一個簡單的使用 RSpec 的測試驅動開發示例。RSpec 工具是一個 Ruby 軟件包,可以用它構建有關您的軟件的規范。該規范實際上是一個描述系統行為的測試。使用 RSpec 的開發流程如下:
編寫一個測試。該測試描述系統中某個較小元素的行為。
運行測試。由于尚沒有為系統中的相應部分構建代碼,測試失敗。這一重要步驟將測試您的測試用例,檢驗測試用例是否在應當失敗的時候失敗。
編寫足夠的代碼,使測試通過。
運行測試,檢驗測試是否成功。
實質上,RSpec 開發人員所做的工作就是將失敗的測試用例調試為成功的測試用例。這是一個主動的過程。本文中,我將介紹 RSpec 的基本用法。
首先,假設您已安裝了 Ruby 和 gems。您還需要安裝 RSpec。輸入下面的內容:
gem install rspec
使用示例
接下來,我將逐步構建一個狀態機。我將遵循TDD 規則。首先編寫自己的測試用例,并且直到測試用例需要時才編寫代碼。Rake 的創建者 Jim Weirich 認為這有助于角色扮演。在編寫實際的生產代碼時,您希望充當一回 jerk 開發人員的角色,只完成最少量的工作來使測試通過。在編寫測試時,您則扮演測試人員的角色,試圖為開發人員提供一些有益的幫助。
以下的示例展示了如何構建一個狀態機。如果您以前從未接觸過狀態機,請查閱 參考資料。狀態機具有多種狀態。每種狀態支持可以轉換狀態機狀態的事件。測試驅動開發入門的關鍵就是從零入手,盡量少地使用假設條件。針對測試進行程序設計。
使用清單 1 的內容創建名為 machine_spec.rb 的文件。該文件就是您的規范。您還不了解 machine.rb 文件的作用,目前先創建一個空文件。
清單 1. 最初的 machine_spec.rb 文件
require 'machine'
原文轉自:http://www.anti-gravitydesign.com