2016年6月20日 星期一

BDD的測試架構

敏捷開發的重要元素之一是驗證,所以不少人也提倡TDDBDD等測試先驅的觀念,但BDD不同於TDD的觀念,是以情境模擬各種不同的結果或呼叫多種的函式後,所產生出來的預期結果,不少工具提供了BDD的驗證過程和debug 工具,其中visaul studio 也能整合各種BDD的套件,所以大大提昇各位的程式品質。


步驟一: Visual Studio 加入擴充的套件










步驟二: 建立單元測試

步驟三: 安裝套件

Install-Package SpecFlow
Install-Package Newtonsoft.Json

步驟四 使用nuget 套件 加入moq

步驟五: 建立【SpecFlow Feature File】的檔案

步驟六: 撰寫BDD的程式碼

Feature: firstBDD
描述相關的測試情況

@mytag
Scenario: 計算八折的價格
Given 匯入 50
When 執行函式
Then 預期結果 40

情境模擬: 計算八折的價格
give : 輸入參數值 50
when: 執行函式
then : 預期結果 40

步驟七: 右鍵產生【Generate Step Definitions

編修以下的程式碼
Iproduct productObj;
int beforeCheapPrice; //打折前的價格
int afterCheapPrice; //打折後的價格
[Given(@"匯入 (.*)")]
public void Given匯入(int p0)
{
beforeCheapPrice = p0;
var mockSvc = new Mock<Iproduct>(); //建立interface 目的在建立mock實作

//mock 偽物件的設定,預計傳入值50後,預期結果的值打八折,所以回傳40
mockSvc.Setup(m => m.summary(50)).Returns(40);
productObj = mockSvc.Object; 實作出Iprdocut物件
}

[When(@"執行函式")]
public void When執行函式()
{
afterCheapPrice = productObj.summary(beforeCheapPrice); //呼叫mock偽物件的summary
}

[Then(@"預期結果 (.*)")]
public void Then預期結果(int p0)
{
//預期 mock 偽物件的summary的結果與預期結果相比
Assert.AreEqual(afterCheapPrice, p0);
}

從描述語言自動產生的程式碼,自動產生三大區塊的分別為GivenWhenThen
  • Given : 取得傳入的參數值和mock的設定
  • When : 執行什麼函式,例如summary 總計的函式
  • Then : 預期值,用Assert關鍵字去預期傳入結果是否相符
宣告介面: 為了可以讓mock實作出偽物件
public interface Iproduct
{
  int summary(int price);
}

步驟八: 開始測試BDD--> 回到測試描述 右鍵--> Debug Specflow secenarios
如果未來開發出實際運作的函式, 它功能強大可以逐行的debug

步驟九 : 測試結果
  
未來我們的團隊也將引用BDD,如果有遇到任何困難再來分享給各位囉~ 也請各位多多分享甘苦談… 


沒有留言:

張貼留言