• 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 (用 NunitxUnitMSTest 来替换 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    现在编译一下这个项目,会产生一个 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 alwaysCopy 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    创建 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:

    在这里插入图片描述

  • 相关阅读:
    基于RSSI的室内wifi定位系统 计算机竞赛
    【云原生之Docker实战】使用docker部署koel家庭个人音乐服务器
    实现fashion_minst服装图像分类
    平均精度(AP)
    全屋智能--智慧家庭新风向
    QT MV\MVC结构
    K8s 部署 Nginx
    C# netcore 创建WebService(SoapCore)
    STM32 内部ADC方式_解释(AN2834)
    Hexagon_V65_Programmers_Reference_Manual(14)
  • 原文地址:https://blog.csdn.net/wumingxiaoyao/article/details/126906159