2011-02-06 28 views
11

我學習行爲驅動開發與ASP.NET MVC,並根據a post史蒂夫·桑德森明白,BDD可以說,至少,以下測試類型:代碼& UI交互個別單位。在this post中提到了類似的東西。如果我想要單元測試和集成測試,我需要兩個不同的測試框架嗎?如何在ASP.NET MVC中以BDD風格進行單元和集成測試?

  • 單元測試存儲庫,控制器,&服務使用上下文/規範框架,像MSpec。測試結果將對開發團隊有用。

  • 使用給定/時/然後框架,像SpecFlow與華廷

    測試完整的行爲(集成)。這個測試的結果對我的客戶很有用。

到目前爲止,我已經看到了使用BDD只限於測試實體的行爲沒有測試庫,控制器等行爲的視頻...有一個樣本項目中,我可以看到這兩個使用BDD方法進行自動化單元和集成測試?

回答

9

我個人使用SpecFlow構建功能的特定測試(即「用戶創造了新的記錄公司」),我有時會(但不總是)使用華廷。爲了測試我的存儲庫或服務類,我將使用NUnit的單元/集成測試。集成測試適用於在測試期間需要與數據庫交談時,單元適用於僅在目標對象中運行代碼而無需外部交互的情況。

我要說的是,你不需要使用BDD框架用於非UI測試。你可以,如果你想,但沒有硬性規定。如果你打算這樣做,那麼我強烈建議爲你的測試創建多個項目。保持它們分離是一個好主意,而不是將所有測試混合到一個項目中。你可以爲它們命名:

MyProject.Tests.Features < - 對於BDD SpecFlow測試。

MyProject.Tests.Integration < - 對於 訪問 外部資源(即數據庫)的測試。

MyProject.Tests.Unit

如果你不想使用兩個BDD框架,你仍然可以使用的MSTest/NUnit的一個BDD的方式。例如,this博客文章描述了一個接近BDD的好命名約定,但針對MSTest/NUnit單元測試。當你測試像倉庫這樣的東西時,你可以將它用於你的非SpecFlow測試。

總之 - 你不必使用SpecFlow和MSpec在您的測試,但如果這樣做,那麼我建議單獨的測試項目。

+0

我同意。這是指定爲場景的外部/ UI測試,因此需要SpecFlow或類似的東西。我不明白爲什麼單元測試應該與平常不同。 – Jonathan 2011-05-11 00:57:37

2

我普遍認同Jason發佈的內容。

您可能需要您的規格分爲兩種類型,系統/集成和單元級測試。您可以使用任何框架來描述這兩個類別,但請記住,純代碼方法(NUnit,MSpec等)需要業務分析師能夠編寫C#。如果您想讓分析師和用戶參與編寫規範,SpecFlow/Gherkin可能是更好的方法。由於語法和規則(Given,When,Then)易於理解,並且從用戶的角度編寫規範很容易在小訓練後記下來。這完全是爲了彌合溝通上的差距,讓用戶幫助您的團隊形成您的域名無處不在的語言。

我建議有規範支持「在外」和「從內到外」的工作。您可以從用戶/分析師/產品所有者編寫的「外部入門」SpecFlow規範開始,並從「未實現」向「綠色」寫入實際代碼。支持該功能的代碼是使用TDD和更爲技術導向的框架(如MSpec)(「內置式」部分)開發的。

以下是使用MSpec進行單元測試和集成測試的存儲庫:https://github.com/agross/duplicatefinder

相關問題