我真的很沮喪學習如何正確開發使用TDD的軟件。看起來,每個人都以不同的方式做出不同的順序。在這一點上,我只想知道所有的考慮因素是什麼?這就是我想到的:我應該使用rspec和水豚。這就是說,我需要編寫所有不同類型的測試,以建立一個構建良好並經過測試的應用程序。我正在尋找一個列表,包括我正在測試的應用程序的區域,測試它的框架以及任何依賴項。什麼是有效的TDD策略?
例如,人們似乎建議以單元測試模型開始,但是當我在TDD上觀看教程時,似乎他們只寫集成測試。我錯過了什麼嗎?
我真的很沮喪學習如何正確開發使用TDD的軟件。看起來,每個人都以不同的方式做出不同的順序。在這一點上,我只想知道所有的考慮因素是什麼?這就是我想到的:我應該使用rspec和水豚。這就是說,我需要編寫所有不同類型的測試,以建立一個構建良好並經過測試的應用程序。我正在尋找一個列表,包括我正在測試的應用程序的區域,測試它的框架以及任何依賴項。什麼是有效的TDD策略?
例如,人們似乎建議以單元測試模型開始,但是當我在TDD上觀看教程時,似乎他們只寫集成測試。我錯過了什麼嗎?
那麼,主題「你怎麼TDD」就像在主題「你如何正確地測試?」一樣在開放的地方。在Ruby中,更具體地說在Rails中,rspec應該是開始的工具,但不能完成。 RSpec允許您爲組件編寫單元測試,以單獨測試它們。在Rails的情況下,這意味着:
這是一個非常好的工具不完全受限於軌道,它也用於測試其他框架。
完成RSpec後,你應該跳到黃瓜。 Cucumber(http://cukes.info/)是最常用的工具(同樣適用於Rails環境)編寫集成測試。然後你可以將黃瓜上的水豚整合在一起。
完成黃瓜工作後,您將完成測試應用程序後端及其HTML輸出(的一部分)的工作。那時候你也應該測試你的javascript代碼。怎麼做?首先,你必須單元測試它。茉莉花(http://pivotal.github.com/jasmine/)是您可能用於工作的工具之一。
然後,你將不得不測試它在你的結構中的集成。怎麼做?您將回到黃瓜並將硒(http://seleniumhq.org/)與您的黃瓜框架集成在一起,您將能夠在瀏覽器中「實時」測試您的集成,訪問您的JavaScript魔術並測試它當場。
因此,在完成這些步驟之後,您已經涵蓋了大部分必要的步驟,以便擁有一個良好集成的測試環境。我們完了嗎?不是真的。你也應該設置一個覆蓋工具(一個可用:https://github.com/colszowka/simplecov)來檢查你的代碼是否真的被很好的測試,並且沒有鬆散的結束。
當你完成這些有趣的步驟之後,你還應該做最後一件事情,以防萬一你沒有單獨開發它,並且團隊足夠大以至於本身仍然難以管理:你將設置一個測試服務器,除了定期運行所有先前的步驟並傳遞有關其結果的通知之外,它無能爲力。
因此,所有這些都爲感興趣的開發人員設置了良好的TDD環境。我只在ruby/rails社區中爲不同類型的測試命名了最常用的框架,但這並不意味着沒有其他框架適合您的工作或更適合您的工作。它仍然沒有教你如何正確測試。爲此,有更多的理論和很多subdebates。
如果我忘記了什麼,請在下面的評論中寫下。
除此之外,你應該接近你如何正確測試。也就是說,你要採用陳述式還是祈使式?
實際應用與TDD的端到端開發確實是一個沒有記錄的活動。確實,你會主要在那裏找到教科書的例子,卡塔斯和理論文章。然而,少數書籍採用更全面和實用的方法來處理TDD - GOOS(強烈推薦),並且在較小程度上採用Beck的Test Driven Development by Example,儘管它們沒有具體針對RoR。
在全球海洋觀測系統所描述的方法與書寫端至端驗收測試(整合測試,這可能會在你的情況下達到的RSpec測試)開始,但這個循環中,你的代碼儘可能多的TDD 單元測試,你需要設計你的低級對象。在編寫這些代碼時,基本上可以從所需的外部層,內部層或應用程序的最方便部分開始。只要你嘲笑任何依賴,他們仍然會保持單元測試。
我也有同樣的問題,當我開始學習rails的時候,有太多的工具或方法讓測試更好,但花了很多時間後,我終於意識到,你可以簡單地忘記你的規則必須做或不做,測試一些你認爲它可能有問題的東西,然後在別的地方。那麼,它需要時間。
這就是我的觀點。
開始簡單,並根據需要添加更多工具和技術。 TDD的應用有很多種方式,因爲每個應用程序都是不同的。一種方法是從Rspec和Capybara(或Cucumber和Capybara)進行端到端測試,然後在需要時添加更多的細粒度測試。
你知道你需要更多的細粒度測試,當需要超過幾分鐘時間才能完成水豚測試。另外,如果您的應用程序的域名不重要,那麼您可以先開始測試域名,這可能會更加富有成效。
這取決於!嘗試不同的方法,看看什麼適合你。
端到端到底是什麼?這是整合測試的第一種方法嗎? –
您編寫了一個測試,模擬用戶在瀏覽器中執行的操作,並分析用戶在瀏覽器中看到的內容。 – xpmatteo
我幾乎在那裏(原諒我)...但是這是通過rspec集成測試完成的,是嗎? –
感謝您的全面回答! rspec是否也提供集成測試?我看到很多教程一起使用rspec和capybara來編寫集成測試。那麼黃瓜/水豚與rspec /水豚做同樣的事情,如果是這樣,那麼從使用rspec進行單元測試到黃瓜進行整合測試的好處是什麼?再次感謝您的強烈反應! –
取決於你認爲的整合。 Rspec確實爲您提供測試您的最終HTML結構結果的可能性。它的不同之處在於你正在進行的測試類型。在Cucumber中,你創建了一個場景,在這個場景中,用戶在你的平臺上從A到B,這更像是一個利益相關者。一個不同的好方法:在黃瓜裏,你會有一個叫做「我填寫註冊表單」的步驟,在rspec中你會測試填寫註冊表單的含義(插入姓名,選擇國家,等等...)。但是關於框架之間的差異有很好的文檔。 – ChuckE