BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit

article/2025/10/15 15:06:08

BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit

  • 引言
  • 创建一个 .NET Framework 项目
  • 添加 SpecFlow package
  • 添加支持 xUnit NuGet 包
  • App.config 和 packages.config 的变化
  • 创建 Spec feature 文件
  • 创建 step definition 文件
  • 创建一个被测类文件
  • 实现 steps
  • 执行测试

引言

BDD - SpecFlow BDD 测试实践 SpecFlow 模板 一文中主要是实践 SpecFlow 项目模板,今天主要实践非模板 BDD 测试 SpecFlow + Xunit,当然前提需要提前安装 SpecFlow’s Visual Studio 插件

创建一个 .NET Framework 项目

在这里插入图片描述
注意 Framework 的选择,.NET Framework 4.6.2 是 support 比较好的版本。
在这里插入图片描述

添加 SpecFlow package

右键 References -> Manage Nuget Packages
在这里插入图片描述

注意选择 SpecFlow 版本依赖的 .NE FrameWork 版本,Spec 2.4.0 依赖不多,我们就安装这个版本吧。
在这里插入图片描述

安装完成后,会多出两个文件 App.config 用来配置项目,packages.config 用来管理 Nuget 包。
在这里插入图片描述

添加支持 xUnit 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.config 的变化

自动地加到 App.config 文件中
在这里插入图片描述

添加的 packages 都在 packages.config 文件中。
在这里插入图片描述

创建 Spec feature 文件

右键项目-> add new item,选择 SpecFlow Feature 类型
在这里插入图片描述

我们还是用 Caculator 的实例吧,用下面内容覆盖 Caculator.feature 文件的内容

Scenario: Add two numbersGiven the first number is 50And the second number is 70When the two numbers are addedThen the result should be 120

在这里插入图片描述

创建 step definition 文件

右键 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;}}
}

在这里插入图片描述

实现 steps

首先安装 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,发现到测试用例,点击绿色图标运行。
在这里插入图片描述
执行结果
在这里插入图片描述


http://chatgpt.dhexx.cn/article/DevuCy2X.shtml

相关文章

漫画 | 被TDD/BDD/DDD......“逼疯”的程序员

作为一个程序员,你需要学习编程语言和编程框架。 虽然有些难度,但是你最终能掌握它们,顺利地写出应用程序。 但是,编程行业总是有一些东西,看起来很美,很简单, 但非常难于掌握。 你会理解TDD/DD…

基于BDD的接口自动化框架开箱即用

1、背景说明 项目思想:BDD 行为驱动开发的思想褒贬不一,这里不多说。遵循的宗旨能解决业务痛点的思想就是好思想。 接口测试工具在实际的业务测试场景中往往会遇到一些使用上的局限性,自定义扩展要求技术较高,如果二次开发工具…

BDD之单元测试(三):BDD的官方教程

BDD之单元测试(二):ATDD,TDD,BDD的区别 BDD之单元测试(三):BDD的官方教程 BDD之单元测试(四):实际的项目教程 cucumber cucumber是BDD(Behav…

五分钟让你彻底了解TDD、ATDD、BDDRBE

在目前比较流行的敏捷开发模式(如极限编程、Scrum方法等)中,推崇“测试驱动开发(Test Driven Development,TDD)”——测试在先、编码在后的开发实践。TDD有别于以往的“先编码、后测试”的开发过程&#xf…

BDD(二元决策图)

转载自:二元决策图(Binary Decision Diagrams - BDD) (一) 在形式化验证、数字系统的设计和验证中,许多任务都涉及大型命题逻辑公式的运算。二元决策图(BDD)已经成为许多应用的首选表示方法。1986年&#x…

TDD和BDD的区别 (TDD vs BDD)

前言 如果你关注软件开发最佳实践方面的话题,你肯定听说过测试驱动开发(TDD - Test Driven Development) 和行为驱动开发(BDD - Behavior Driven Development)。这篇文章会为你阐述这两种模式的含义并举例,同时对二者进行比较。 测试驱动开发 (TDD) 当…

行为驱动开发(BDD)全面介绍

行为驱动开发(BDD)全面介绍 作者:杜铁绳 在软件行业中,软件研发项目软件产品交付经常被推迟、研发费用经常超出预算、经常遗漏客户所需的软件功能、有将近20%的项目最终无法交付,或者取消。这些软件研发往往花费了大…

web自动化测试进阶篇02 ——— BDD与TDD的研究实践

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

全面理解BDD(行为驱动开发):转变思维方式,提升软件质量

在传统的软件开发流程中,开发人员和测试人员的工作通常是相互独立的。开发人员负责编写代码,测试人员负责找出代码中的问题。然而,这种方法可能导致沟通不足,而且会浪费时间和资源。为了解决这些问题,出现了一种新的开…

BDD - 介绍 Behavior-Driven Development 行为驱动开发

BDD - Behavior-Driven Development 行为驱动开发 引言什么是 BDD相关软件开发流程TDDATDDBDD 和 TDD 的关系 BDD 原则BDD 流程BDD 优势 引言 自从接触到 BDD,深有感触,BDD 是广大 QA 的福音,测试领域的天空豁然开朗。BDD 模式更有助于团队合…

BDD自动化测试

BDD(行为驱动开发)自动化测试在软件测试领域一直在发展。随着agile思想在越来越多的项目中推广,以及非开发人员在项目的更多参与,BDD风格的自动化测试被越来越多项目组采纳并实施。 BDD(Behavior Driven Development&…

端到端视频编码:DVC

本文来自CVPR 2019论文《DVC: An End-to-end Deep Video Compression Framework》 官方开源代码地址:https://github.com/GuoLusjtu/DVC DVC是一个端到端的视频编码模型,之前也有过一些基于DNN的视频编码方法,但是通常是使用DNN模型替换视频…

主流视频编码压缩技术基本概念(二) 算法分析

主流视频编码压缩技术基本概念(二) 算法分析 一、MPEG-1技术介绍1、 MPEG-1的层次及语法结构①、运动补偿序列(Sequence)②、图片组(GOP)③、 图片(Picture)④、 图片切片(Slice)⑤、…

视频编码解码基本知识

最近在做摄像头视频的数据处理,得到了网络相机的.h264格式的数据,需要做解码处理,由于对视频的编码解码原理不太了解,因此查找资料总结一下 为什么要进行视频编码? 视频编码又称为视频压缩,伴随着用户对高…

FFMpeg 实现视频编码、解码

FFMpeg 作为音视频领域的开源工具,它几乎可以实现所有针对音视频的处理,本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例:编码、解码、封装、解封装、转码、缩放以及添加水印。 接下来会由发现问题->分析问题->解决问题->实现方案,循序渐进的完成。…

感知视频编码

感知视频编码就是在视频编码的过程中,将HVS应用进去,挖掘主观视频感知冗余,进一步提高视频编码压缩效率。 1.Computational visual perception:三种视觉感知计算模型 (1)视觉敏感模型 (2)视觉注…

Android视频编码的坑

视频开发是一个核心方向,那Camera开发一直是Android的一个核心,笔者做过Camera HAL,也做过Camera App, 同时也开发过Camera 滤镜,这个过程中也遇到和解决过很多棘手的问题,也一直想总结一篇,看到这篇后感觉…

视频编码未来简史

首先我们回顾一下视频编码的历史,视频编码起源于广播电视,在很长一段时间里视频编解码的变革主要推动力是来自于广播电视。当然,今天我们看互联网的视频编码是速度越来越快,昨天在ICET2017年世界大会上,ICET的主席还说…

PCS2021:针对游戏内容的视频编码工具分析和数据集

本文来自PCS2021论文《Video Coding Tool Analysis and Dataset for Gaming Content》 随着近几年游戏市场的逐渐壮大,新的游戏形态(AR、VR、云游戏等)逐渐发展。和传统的摄像机内容和屏幕内容相比,游戏内容有着不同的特点导致对于…

视频编码综述

你用手机、电脑看电影追剧时,是看的高清还是标清?我想只要网速够得上应该没有人愿意再看标清了吧!毕竟高清视频的高分辨率和清晰画质总是能让人有更好的观影体验。 伴随着用户对高清视频的需求量的增加,视频多媒体的视频数据量也在…