敏捷開發的重要元素之一是驗證,所以不少人也提倡TDD和BDD等測試先驅的觀念,但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);
} |
從描述語言自動產生的程式碼,自動產生三大區塊的分別為Given、When、Then
- Given : 取得傳入的參數值和mock的設定
- When : 執行什麼函式,例如summary 總計的函式
- Then : 預期值,用Assert關鍵字去預期傳入結果是否相符
宣告介面:
為了可以讓mock實作出偽物件
public
interface
Iproduct
{
int
summary(int
price);
} |
步驟八:
開始測試BDD-->
回到測試描述
右鍵-->
Debug Specflow secenarios
如果未來開發出實際運作的函式,
它功能強大可以逐行的debug
步驟九
: 測試結果
未來我們的團隊也將引用BDD,如果有遇到任何困難再來分享給各位囉~ 也請各位多多分享甘苦談…
沒有留言:
張貼留言