[C#.NET][SpecFlow] 使用 Scenario Outline 執行多次驗証

[C#.NET][SpecFlow] 使用 Scenario Outline 執行多次驗証

續上篇,http://www.dotblogs.com.tw/yc421206/archive/2014/12/25/147796.aspx

Table 是用來處理集合

Scenario Outline 是多次調用被測端,這有點像 MSTest 裡的驅動測試

如何使用 Scenario Outline

  1. 宣告 Scenario Outline:
  2. 使用 Example 定義輸入資料以及期望資料
  3. 若要使用 Example 欄位,欄位名稱要加<xxx>,例如:<UserId>

 

範例如下:

Scenario Outline: authentication
    Given 我輸入 <UserId>,<Password>
    When 我按下Login
    Then 結果應為 <Result>
    Examples:
    | UserId | Password | Result |
    | kobe   | 12234    | false  |
    | yao    | 1234     | true   |
    | jordan | 5566     | false  |   

https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.SpecflowLogin/Simple.SpecflowLogin/Login.feature

當 Scenario 宣告成 Outline,測試總管那邊會把一個 Scenario 拆成 Examples 所定義的筆數

 

若要針對整個 Scenario Debug,可以按右鍵 Debug SpecFlow Scenario,或是 Ctrl+R,Ctrl+A

 

SpecFlow 的程式碼,就沒什麼特別的地方了

[Given(@"我輸入 (.*),(.*)")]
public void Given我輸入(string userId, string password)
{
	var account = new Account() { UserId = userId, Password = password };
	ScenarioContext.Current.Set(account, "account");
}

[When(@"我按下Login")]
public void When我按下Login()
{
	var account = ScenarioContext.Current.Get<Account>("account");
	var actual = this._security.IsVerify(account.UserId, account.Password);
	ScenarioContext.Current.Set<bool>(actual, "actual");
}

[Then(@"結果應為 (.*)")]
public void Then結果應為(bool expected)
{
	var actual = ScenarioContext.Current.Get<bool>("actual");
	Assert.AreEqual(expected, actual);
}

程式碼如下:

https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.SpecflowLogin/Simple.SpecflowLogin/LoginSteps.cs


而,被測端程式碼,只是很簡單的邏輯

public bool IsVerify(string userId, string password)
{
	return userId == "yao" && password == "1234";
}

程式碼如下:

https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.SpecflowLogin/Simple.Utility/Security.cs


文章出自:https://www.dotblogs.com.tw/yc421206/2014/12/25/unit_test_specflow_scenario_outline

專案位置:https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.SpecflowLogin/

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo