C#?使用SpecFlow創(chuàng)建BDD測試用例的示例代碼
將自然語言編寫的測試用例轉(zhuǎn)換為可執(zhí)行的測試,可以大大降低需求與開發(fā)之間的溝通成本,這是BDD(行為驅(qū)動開發(fā))希望達(dá)到的效果。SpecFlow是.Net平臺的BDD工具,可以幫助我們創(chuàng)建面向BDD的測試用例。
首先,在Visual Studio 2022中安裝SpecFlow插件。選擇菜單擴(kuò)展->管理擴(kuò)展,然后搜索SpecFlow:

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

項(xiàng)目名稱為TestBmi,選擇xUnit作為Test Framework:

創(chuàng)建完成后,項(xiàng)目的結(jié)構(gòu)是這樣的:

然后,添加項(xiàng)目引用,將測試目標(biāo)項(xiàng)目CalBmi添加到TestBmi的項(xiàng)目引用中:

到這里,準(zhǔn)備工作完成,現(xiàn)在可以開始寫測試用例了。在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
這個測試的是兩個數(shù)字相加,我們照貓畫虎,編寫我們自己的測試用例,我們添加一個新的SpecFlow feature:

編寫代碼如下:
Feature: 計算BMI @mytag Scenario: 根據(jù)身高體重計算BMI Given 身高1.75米 And 體重70.00公斤 When 計算BMI Then 結(jié)果應(yīng)該是22.86
點(diǎn)擊右鍵,選擇DefineSteps:

一個新的測試文件被創(chuàng)建了:

代碼如下:
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(@"結(jié)果應(yīng)該是(.*)")]
public void Then結(jié)果應(yīng)該是(Decimal p0)
{
throw new PendingStepException();
}
}
}
在這個類中,編寫測試,首先創(chuàng)建BmiCalculator的實(shí)例:
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(@"結(jié)果應(yīng)該是(.*)")]
public void Then結(jié)果應(yīng)該是(Decimal result)
{
_result.Should().Be(result);
}
}
}
在測試管理器中運(yùn)行這個測試:

與想象的一樣,測試沒有通過,因?yàn)槲覀儧]有編寫實(shí)現(xiàn)代碼,現(xiàn)在,修改BmiCalculator ,增加計算方法:
namespace CalBmi
{
public class BmiCalculator
{
public Decimal Height { get; set; }
public Decimal Weight { get; set; }
public Decimal Bmi()
{
return Weight/Height/Height;
}
}
}
再次運(yùn)行測試:

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

在測試中給出了測試步驟和每個步驟花費(fèi)的時間。
到此這篇關(guān)于C# 使用SpecFlow創(chuàng)建BDD測試用例的文章就介紹到這了,更多相關(guān)C# SpecFlow BDD測試用例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
TextBox獲取輸入焦點(diǎn)時自動全選的實(shí)現(xiàn)方法
TextBox獲取輸入焦點(diǎn)時自動全選的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03
VS2013創(chuàng)建Windows服務(wù)與調(diào)試服務(wù)的圖文方法
這篇文章主要介紹了VS2013創(chuàng)建Windows服務(wù)與調(diào)試服務(wù)的圖文方法,需要的朋友可以參考下2017-02-02
C#筆記之EF Code First 數(shù)據(jù)模型 數(shù)據(jù)遷移
EF 中 Code First 的數(shù)據(jù)遷移網(wǎng)上有很多資料,我這份并沒什么特別。Code First 創(chuàng)建視圖網(wǎng)上也有很多資料,但好像很麻煩,而且親測好像是無效的方法(可能是我太笨,沒搞成功),我摸索出了一種簡單有效的方法,這里分享給大家2021-09-09

