BDD - SpecFlow BDD 测试实践 SpecFlow + SpecRun
引言
上篇有介绍 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit,今天来实践一下 SpecFlow + SpecRun。
SpecFlow+ Runner 说明
SpecFlow+ Runner 已经宣布不再推新和维护了 The Retirement of SpecFlow+ Runner ,所以在使用上会有点限制,.NET 5 及之前的版本,没有变化,Nuget package 还会保留,使用 SpecFlow+ Runner 没有任何限制,但是不再会有 Bug Fix 和 New Feature 发布。.NET 6,需要替换 unit test runner (用 Nunit,xUnit 或 MSTest 来替换 SpecFlow+ Runner),具体参考 Migrating away from the SpecFlow+ Runner
创建一个 .NET Framework 项目
我们接着上一篇 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 中的实例,在已有的 Solution 中添加一个新的项目。
右键 Solution -> Add -> New Project
选择 Class Library (.NET Framework)
注意
Framework 的选择,我本机是 .NET Framework 4.6.2,只要是 .NET 5 及之前的版本应该都没有问题。
新项目 SpecFlowSecRun 创建好了。
添加 SpecFlow package
右键 References -> Manage Nuget Packages
注意
选择 SpecFlow 版本依赖的 .NE FrameWork 版本,最新版本依赖 .NET Framework 4.6.1,我的是 .NET Framework 4.6.2,是可以向前后容的。
SpecFlow 装好以后会多出 packages.config 文件用来管理 Nuget 包。相比 SpecFlow 2.4,没有自动生成 App.config 文件。
安装 SpecRun Package
一定要选择跟 SpecFlow 一致的版本
,我们也选择最新版本
安装结束后会多出一些文件
创建 Feature 文件
该装的依赖包都装好了,我们尝试创建一个 Feature 文件试试。
右键项目-> Add -> New Item
选择 SpecFlow -> Feature File for SpecFlow
Feature 文件生成
用下面代码替换 feature 文件中的内容
Feature: Calculator
A short summary of the feature
@tag1
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
现在编译一下这个项目,会产生一个 Calculator.feature.cs 文件,主要是将 SpecFlow Scenarios 转换成 SpecRun 可执行的 test cases。
SpecFlow 3 Vs SpecFlow 2
相比 SpecFlow 2.4.0 版本,这个 Calculator.feature.cs 文件是没有包含在 VS 项目文件中的,删除这个文件后,只要编译一下又会重新生成,所以不用在代码仓库中去维护这个文件,算是一个改进,而 SpecFlow 2.4.0 就必须将它和 对应的 feature 文件一起提交到代码库,其他人拉代码时就会出现编译问题。
自动生成 feature.cs 文件出错 TroubleShooting
SpecFlow 因为不会自动生成 App.config 项目配置文件,有时会遇到发生生成 feature.cs 文件出错,参考 SpecFlow Configuration 本文是 .NET Framework 项目,所以没有强制要求进行配置,通常是不会出现这种错误。
方法一: 手动添加 specflow.json
手动添加一个SpecFlow 配置文件 specflow.json,并且将 specflow.json 文件属性 Copy to Output Directory 设置成 Copy always 或 Copy if newer
方法二:手动添加一个 App.config 文件
并添加如下内容:
<configSections>
<section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
</configSections>
<specFlow>
<!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
<!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config --><!-- use unit test provider SpecRun+NUnit or SpecRun+MsTest for being able to execute the tests with SpecRun and another provider --><unitTestProvider name="SpecRun" /><plugins>
<add name="SpecRun" />
</plugins></specFlow>
创建 step definition 文件
右键 feature 文件中的 step -> Define Steps…,创建 step definition
创建的 step definition 文件,模板文件中 step 都是没有实现的。
实现 steps
为了简单点,每个 step 只做一个输出
执行测试
编译整个 Solution, 并打开菜单 Test -> Test Explorer,发现到测试用例,点击绿色图标运行。
执行结果,还可以看到每个 step 的输出
测试报告
执行完,会自动生成测试报告,当前 solution 中生成 TestResults 文件夹,相比上篇 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 要友好多了,SpecFlow + Xunit 不会自动生成测试报告。
生成的 html 报告
生成的 txt log: