因為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 的範本,如下,
那這樣不就無法在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 。
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檔案,如下,
5.手動將 SpecFlow 的範本(2012, 2013, 2010) 放到VS.NET Express 的範本目錄之中,C:\Users\[你電腦中使用者名稱]\Documents\Visual Studio 2013\Templates\ItemTemplates\Visual C#
6.開啟Visual Studio Express 2013 Express for Windows Desktop 後,在Menu上點選工具=>外部工具(E) ,開啟「外部工具」視窗後,按下「加入」,然後在以下對應的欄位中輸入資訊,然後再下確定,如下,
7.新增「單元測試專案」(請記得要選擇C#的專案哦!!!),如下,
8.刪除預設的UnitTest1.cs檔案,然後新增一個SpecFlowFeature 的項目,如下,
9.可以發現,雖然新增了 feature 檔案,但卻不會自動產生出對應的 cs 檔案,如下,
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」參考,
12.在Menu上點選工具=>產生SpecFlow測試,就會透過SpecFlow.exe來產生測試的cs檔,專案中按下重新整理,就會發現CS檔產生出來了,如下,
13.然後再將產生出來的cs檔案加入專案建置,就可以在測試總管中看到該測試了哦! 如下,
以上是透過 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看起來才會變色,如下,
NotePad++的使用者定義語言及使用可以從以下網址找到,
Cucumber:Gherkin syntax highlighting for Notepad++
本文如果錯誤地方,或是各位先進有更好的方式,也請跟筆者說一下,感謝!
參考資料
C# ATDD on a shoestring (or the complete guide to SpecFlow & NUnit in Visual Studio 2010 Express)
[30天快速上手TDD][Day 24]BDD - SpecFlow Introduction
各Testing Framework的比較(NUnit, MSTest, xUnit.NET)
Running unit tests in Visual Studio Express
測試專案
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^