[VS]Visual Studio Express 使用 SpecFlow 的方式

因為Visual Studio Express 2013無法從擴充功能中安裝SpecFlow的範本,以下參考「C# ATDD on a shoestring (or the complete guide to SpecFlow & NUnit in Visual Studio 2010 Express)
」來讓VS.NET Express也可以使用 SpecFlow 。

環境:Visual Studio  Express 2013 for Windows Desktop

因為 Visual Studio  Express 2013 無法從擴充功能中安裝 SpecFlow 的範本,如下,

image

 

那這樣不就無法在Express版本中使用SpecFlow了嗎?

好在Alister Scott大大佛心來著寫了「C# ATDD on a shoestring (or the complete guide to SpecFlow & NUnit in Visual Studio 2010 Express)
」這篇Blog,所以可以參考來讓VS.NET Express版本也可以使用。

因為 Visual Studio  Express 2013 for Windows Desktop 中可以建立測試專案,所以可以設定讓 SpecFlow.exe  來產生 MSTest 的測試檔案(預設是產生NUnit的測試檔案)。

以下為詳細的步驟,

1.download SpecFlow ,然後解壓縮放到硬碟上,例如D:\SpecFlow 。

image

2.將SpecFlow\tools (D:\SpecFlow\tools)的Path,加到系統環境變數之中,以方便在任何命令視窗中,可以執行specflow.exe。

3.在SpecFlow\tools 目錄中,新增specflow.exe.config 文字檔(utf8編碼),內容如下,


<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
         <supportedRuntime version="v4.0.30319" /> 
    </startup> 
</configuration>

PS.如果沒有該檔案的話,後面透過 SpecFlow.exe 來產生測試檔時,可能會發生「The element <ImportGroup> beneath element <Project> is unrecognized.  C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.CSharp.targets」的錯誤。

 

4.在SpecFlow\tools 目錄中,新增 generatespecflowtests.bat ,主要是要透過 SpecFlow.exe 來產生測試的檔案,內容如下,

echo Starting to generate SpecFlow unit tests
SpecFlow generateAll %1 /force /verbose
echo Finished generating SpecFlow unit tests

所以可以發現,在SpecFlow\Tools目錄中,會有我們新增的SpecFlow.exe.config及 generatespecflowtests.bat檔案,如下,

image

 

5.手動將 SpecFlow 的範本(2012, 2013, 2010) 放到VS.NET Express 的範本目錄之中,C:\Users\[你電腦中使用者名稱]\Documents\Visual Studio 2013\Templates\ItemTemplates\Visual C#

image

 

6.開啟Visual Studio Express 2013 Express for Windows Desktop 後,在Menu上點選工具=>外部工具(E) ,開啟「外部工具」視窗後,按下「加入」,然後在以下對應的欄位中輸入資訊,然後再下確定,如下,

image

 

7.新增「單元測試專案」(請記得要選擇C#的專案哦!!!),如下,

image

 

8.刪除預設的UnitTest1.cs檔案,然後新增一個SpecFlowFeature 的項目,如下,

image

image

 

9.可以發現,雖然新增了 feature 檔案,但卻不會自動產生出對應的 cs 檔案,如下,

image

 

10.新增「應用程式組態檔」(app.config),然後新增以下的內容,


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" 
             type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
  </configSections>
  <specFlow>
    <unitTestProvider name="MsTest"/>
  </specFlow>
</configuration>

 

11.專案加入「TechTalk.SpecFlow.dll」參考,

image

 

12.在Menu上點選工具=>產生SpecFlow測試,就會透過SpecFlow.exe來產生測試的cs檔,專案中按下重新整理,就會發現CS檔產生出來了,如下,

image

 

13.然後再將產生出來的cs檔案加入專案建置,就可以在測試總管中看到該測試了哦! 如下,

image

 

以上是透過 Visual Studio  Express 2013 for Windows Desktop 來使用 SpecFlow,希望對大家有所幫助。

 

2014/01/22 Update

後來再研究了一下,VS Express產生Feature的cs檔後,就沒有辦法再自動產生Step的cs檔,所以就需要由開發人員自行新增 Step Definition 檔案,然後加入對應到Feature中各Step的Binding程式,如下,

Scenario: Password Strength Indicator
    Given 在註冊頁面
    When 輸入密碼Pass
    Then 密碼的強度指示應該出現Poor
   
對應的Step Binding Code =>

[Given]
public void Given_在註冊頁面()
{
    ScenarioContext.Current.Pending();
}

[When]
public void When_輸入密碼Pass()
{
    ScenarioContext.Current.Pending();
}

 

[Then]
public void Then_密碼的強度指示應該出現Poor()
{
    ScenarioContext.Current.Pending();
}

 

而測試案例,如果只想要寫Feature而已,則可以透過 NotePad++ 來寫,但需要多加入 Gherkin 語言的定義,Keyword看起來才會變色,如下,

image

 

NotePad++的使用者定義語言及使用可以從以下網址找到,

Cucumber:Gherkin syntax highlighting for Notepad++

 

本文如果錯誤地方,或是各位先進有更好的方式,也請跟筆者說一下,感謝!

 

參考資料

C# ATDD on a shoestring (or the complete guide to SpecFlow & NUnit in Visual Studio 2010 Express)

使用 SpecFlow 和 WatiN 進行行為驅動開發

[30天快速上手TDD][Day 24]BDD - SpecFlow Introduction

各Testing Framework的比較(NUnit, MSTest, xUnit.NET)

Running unit tests in Visual Studio Express

SpecFlow Report

 

測試專案

 

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^