將自然語言撰寫的測驗用例轉換為可執行的測驗,可以大大降低需求與開發之間的溝通成本,這是BDD(行為驅動開發)希望達到的效果,SpecFlow是.Net平臺的BDD工具,可以幫助我們創建面向BDD的測驗用例,
首先,在Visual Studio 2022中安裝SpecFlow插件,選擇選單擴展->管理擴展,然后搜索SpecFlow:

點擊下載,下載完成后,需要退出Visual Studio 2022,插件會自動安裝,
我們撰寫一個簡單的計算BMI(Body Mass Index身體質量指數)的功能作為測驗目標,演算法很簡單,輸入是身高和體重,計算公式是體重除以身高的平方,
再次啟動Visual Studio,創建一個類別庫專案,名稱為CalBmi,撰寫代碼如下:
namespace CalBmi
{
public class BmiCalculator
{
public Decimal Height { get; set; }
public Decimal Weight { get; set; }
public Decimal Bmi()
{
throw new NotImplementedException();
}
}
}
接下來,在解決方案中添加SpecFlow專案,選擇專案型別為SpecFlow:

專案名稱為TestBmi,選擇xUnit作為Test Framework:

創建完成后,專案的結構是這樣的:

然后,添加專案參考,將測驗目標專案CalBmi添加到TestBmi的專案參考中:

到這里,準備作業完成,現在可以開始寫測驗用例了,在TestBmi中有一個示例模板,

代碼是這樣的:
Feature: Calculator

Simple calculator for adding **two** numbers
Link to a feature: [Calculator](TestBmi/Features/Calculator.feature)
***Further read***: **[Learn more about how to generate Living Documentation](https://docs.specflow.org/projects/specflow-livingdoc/en/latest/LivingDocGenerator/Generating-Documentation.html)**
@mytag
Scenario: Add two numbers
Given the first number is 50
And the second number is 70
When the two numbers are added
Then the result should be 120
這個測驗的是兩個數字相加,我們照貓畫虎,撰寫我們自己的測驗用例,我們添加一個新的SpecFlow feature:

撰寫代碼如下:
Feature: 計算BMI
@mytag
Scenario: 根據身高體重計算BMI
Given 身高1.75米
And 體重70.00公斤
When 計算BMI
Then 結果應該是22.86
點擊右鍵,選擇DefineSteps:

一個新的測驗檔案被創建了:

代碼如下:
using System;
using TechTalk.SpecFlow;
namespace TestBmi.StepDefinitions
{
[Binding]
public class 計算BMIStepDefinitions
{
[Given(@"身高(.*)米")]
public void Given身高米(Decimal p0)
{
throw new PendingStepException();
}
[Given(@"體重(.*)公斤")]
public void Given體重公斤(Decimal p0)
{
throw new PendingStepException();
}
[When(@"計算BMI")]
public void When計算BMI()
{
throw new PendingStepException();
}
[Then(@"結果應該是(.*)")]
public void Then結果應該是(Decimal p0)
{
throw new PendingStepException();
}
}
}
在這個類中,撰寫測驗,首先創建BmiCalculator的實體:
private readonly BmiCalculator _bmical = new BmiCalculator();
然后,改寫各個方法:
using CalBmi;
using System;
using TechTalk.SpecFlow;
namespace TestBmi.StepDefinitions
{
[Binding]
public class 計算BMIStepDefinitions
{
private readonly BmiCalculator _bmical = new BmiCalculator();
private decimal _result;
[Given(@"身高(.*)米")]
public void Given身高米(Decimal p0)
{
_bmical.Height = p0;
}
[Given(@"體重(.*)公斤")]
public void Given體重公斤(Decimal p0)
{
_bmical.Weight=p0;
}
[When(@"計算BMI")]
public void When計算BMI()
{
_result=_bmical.Bmi();
}
[Then(@"結果應該是(.*)")]
public void Then結果應該是(Decimal result)
{
_result.Should().Be(result);
}
}
}
在測驗管理器中運行這個測驗:

與想象的一樣,測驗沒有通過,因為我們沒有撰寫實作代碼,現在,修改BmiCalculator ,增加計算方法:
namespace CalBmi
{
public class BmiCalculator
{
public Decimal Height { get; set; }
public Decimal Weight { get; set; }
public Decimal Bmi()
{
return Weight/Height/Height;
}
}
}
再次運行測驗:

仍然沒有通過,問題是需要保留兩位小數,最后一位四舍五入,修改演算法:
public Decimal Bmi()
{
return System.Decimal.Round(Weight /Height/Height,2);
}
再次運行測驗,這次通過了:

在測驗中給出了測驗步驟和每個步驟花費的時間,
本文來自博客園,作者:尋找無名的特質,轉載請注明原文鏈接:https://www.cnblogs.com/zhenl/p/16380928.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/493210.html
標籤:其他
