上篇有介绍 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit,今天来实践一下 SpecFlow + SpecRun。
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
我们接着上一篇 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 中的实例,在已有的 Solution 中添加一个新的项目。
右键 Solution -> Add -> New Project
选择 Class Library (.NET Framework)
注意
Framework 的选择,我本机是 .NET Framework 4.6.2,只要是 .NET 5 及之前的版本应该都没有问题。
新项目 SpecFlowSecRun 创建好了。
右键 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 文件。
一定要选择跟 SpecFlow 一致的版本
,我们也选择最新版本
安装结束后会多出一些文件
该装的依赖包都装好了,我们尝试创建一个 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 2.4.0 版本,这个 Calculator.feature.cs 文件是没有包含在 VS 项目文件中的,删除这个文件后,只要编译一下又会重新生成,所以不用在代码仓库中去维护这个文件,算是一个改进,而 SpecFlow 2.4.0 就必须将它和 对应的 feature 文件一起提交到代码库,其他人拉代码时就会出现编译问题。
SpecFlow 因为不会自动生成 App.config 项目配置文件,有时会遇到发生生成 feature.cs 文件出错,参考 SpecFlow Configuration 本文是 .NET Framework 项目,所以没有强制要求进行配置,通常是不会出现这种错误。
手动添加一个SpecFlow 配置文件 specflow.json,并且将 specflow.json 文件属性 Copy to Output Directory 设置成 Copy always 或 Copy if newer
并添加如下内容:
<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>
右键 feature 文件中的 step -> Define Steps…,创建 step definition
创建的 step definition 文件,模板文件中 step 都是没有实现的。
为了简单点,每个 step 只做一个输出
编译整个 Solution, 并打开菜单 Test -> Test Explorer,发现到测试用例,点击绿色图标运行。
执行结果,还可以看到每个 step 的输出
执行完,会自动生成测试报告,当前 solution 中生成 TestResults 文件夹,相比上篇 BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit 要友好多了,SpecFlow + Xunit 不会自动生成测试报告。
生成的 html 报告
生成的 txt log: