BDD - SpecFlow BDD 测试实践 SpecFlow 模板 一文中主要是实践 SpecFlow 项目模板,今天主要实践非模板 BDD 测试 SpecFlow + Xunit,当然前提需要提前安装 SpecFlow’s Visual Studio 插件。
注意 Framework 的选择,.NET Framework 4.6.2 是 support 比较好的版本。
右键 References -> Manage Nuget Packages
注意选择 SpecFlow 版本依赖的 .NE FrameWork 版本
,Spec 2.4.0 依赖不多,我们就安装这个版本吧。
安装完成后,会多出两个文件 App.config 用来配置项目,packages.config 用来管理 Nuget 包。
根据 xUnit 的依赖包
安装 xUnit,选择最新版本,因为没有依赖特定的 .NET Framework
安装 SpecFlow.xUnit,主要选择跟 SpecFlow 版本一致
xunit.runner.visualstudio 最新版本 2.4.5 正好对 .NET Framework 4.6.2 支持,所以选择这个最新版本安装。
Microsoft.NET.Test.Sdk,选择最新版本即可。
自动地加到 App.config 文件中
添加的 packages 都在 packages.config 文件中。
右键项目-> add new item,选择 SpecFlow Feature 类型
我们还是用 Caculator 的实例吧,用下面内容覆盖 Caculator.feature 文件的内容
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
右键 feature 文件中的 step -> Define Steps…,创建 step definition
创建的 step definition 文件,模板文件中 step 都是没有实现的。
创建一个 被测的 class 文件,Caculator.cs, 并用下面代码覆盖文件内容:
namespace SpecFlowXunitDemo.UnderTest
{
public class Calculator
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
public int Add()
{
return FirstNumber + SecondNumber;
}
}
}
首先安装 FluentAssertions 依赖,用于测试断言
用下面代码覆盖 step definition 文件的内容:
using FluentAssertions;
using SpecFlowXunitDemo.UnderTest;
using TechTalk.SpecFlow;
namespace SpecFlowXunitDemo
{
[Binding]
public class CalculatorStepDefinitions
{
private readonly Calculator _calculator = new Calculator();
private int _result;
[Given("the first number is (.*)")]
public void GivenTheFirstNumberIs(int number)
{
_calculator.FirstNumber = number;
}
[Given("the second number is (.*)")]
public void GivenTheSecondNumberIs(int number)
{
_calculator.SecondNumber = number;
}
[When("the two numbers are added")]
public void WhenTheTwoNumbersAreAdded()
{
_result = _calculator.Add();
}
[Then("the result should be (.*)")]
public void ThenTheResultShouldBe(int result)
{
_result.Should().Be(result);
}
}
}
编译整个 Solution, 并打开菜单 Test -> Test Explorer,发现到测试用例,点击绿色图标运行。
执行结果