如何在 ASP.NET MVC 中以 BDD 樣式進行單元和集成測試?
我正在學習使用 ASP.NET MVC 進行行為驅動開發,並且根據Steve Sanderson的一篇文章,我了解到 BDD 至少可以表示以下測試類型:程式碼的單個單元和 UI 互動。這篇文章中提到了類似的東西。如果我想要單元測試和集成測試,我是否需要兩個不同的測試框架?
- 使用上下文/規範框架(如 MSpec)對儲存庫、控制器和服務進行單元測試。使用它的測試結果將對開發團隊有用。
- 使用給定/何時/然後框架測試完整的行為(集成),例如帶有 Watin 的 SpecFlow。此測試的結果將對我的客戶有用。
到目前為止,我看到的有關使用 BDD 的影片僅限於測試實體的行為,而沒有測試儲存庫、控制器等的行為……是否有一個範例項目,我可以在其中使用BDD 方法?
就我個人而言,我使用 SpecFlow 來建構特定於功能的測試(即“使用者創建新的公司記錄”),有時(但不總是)我會使用 Watin。為了測試我的儲存庫或服務類,我將在 NUnit 中使用單元/集成測試。集成測試用於在測試期間需要與數據庫通信時,單元用於在沒有外部互動的情況下在被測目標對像中簡單地執行程式碼。
我會說你不需要為你的非 UI 測試使用 BDD 框架。如果你願意,你可以,但對此沒有硬性規定。如果你打算這樣做,那麼我強烈建議為你的測試創建一個以上的項目。將它們分開是一個好主意,而不是將所有測試混合到一個項目中。你可以命名它們:
MyProject.Tests.Features <– 用於 BDD SpecFlow 測試。
MyProject.Tests.Integration <– 用於訪問外部資源(即數據庫)的測試。
MyProject.Tests.Unit
如果您不想使用兩個 BDD 框架,您仍然可以以 BDD 方式使用 MSTest/NUnit。例如,這篇部落格文章描述了一個很好的命名約定,它接近 BDD,但針對 MSTest/NUnit 單元測試。當您測試儲存庫之類的東西時,您可以將其用於非 SpecFlow 測試。
總之——你不必在測試中使用 SpecFlow 和 MSpec,但如果你這樣做了,那麼我推薦單獨的測試項目。