使用LightBDD轻松实现行为驱动开发

前言

上次,我们介绍了行为驱动开发(BDD)

它的优点是可以使用纯文本编写测试用例,不需要编程经验。

如果测试用例也全部是程序员写的情况,这种方式反而存在障碍,feature使用与编写代码的语言完全不同的语言来编写,维护测试需要在feature和step代码间来回切换。

LightBDD

LightBDD是轻量级的行为驱动开发框架。

它提供了一种替代方案,你可以直接在C#代码中编写BDD风格的测试,以便开发人员可以使用IDE以简单自然的方式维护测试。

我们以SpecFlow官方的计算器示例为例,演示使用LightBDD如何实现。

1. 创建Calculator项目

假设,我们需要实现加法功能。

创建一个类库,编写如下代码:

public class Calculator
{public int FirstNumber { get; set; }public int SecondNumber { get; set; }public int Add(){return FirstNumber + SecondNumber;}
}

2. 创建XUnit测试项目

添加XUnit测试项目,引用nuget包LightBDD.XUnit2

然后创建partial类,以便将feature和step代码分开,这样更好管理和阅读:

[FeatureDescription("第一个feature")]
public partial class UnitTest1 : FeatureFixture
{//放置场景代码
}public partial class UnitTest1
{//放置步骤代码
}

3. 编写场景代码

现在编写我们第一个场景,使用SpecFlow是这样的:

f08ffdd91262a697bbfbff6f04448066.png

我们用LightBDD可以这样写:

[Scenario]
public void Adding_two_numbers_should_return_total()
{Runner.RunScenario(_ => Given_the_first_number_is(50),_ => And_the_second_number_is(70),_ => When_the_two_numbers_are_added(),_ => Then_the_result_should_be(120));
}

4. 编写step代码

可以看到,场景全部用C#代码,因此从场景定义中自动生成方法变得非常容易。

填充后的step代码如下:

public partial class UnitTest1
{private readonly Calculator _calculator = new Calculator();private int _result;private void Given_the_first_number_is(int number){_calculator.FirstNumber = number;}private void And_the_second_number_is(int number){_calculator.SecondNumber = number;}private void When_the_two_numbers_are_added(){_result = _calculator.Add();}private void Then_the_result_should_be(int number){Assert.Equal(number, _result);}
}

5. 运行测试

最后,运行测试:

f99974025f9da739cff2ae653d3c2dff.png

而且,如果你打开bin\Debug\net5.0\Reports文件夹,可以找到一个HTML报告,更加清晰地反映测试质量:

ed9da86af97b6d283b6194e5cc02fba9.png

结论

我们都知道,好的测试可以带来更好、错误更少的程序,实现更快的开发。

但是编写出有效的测试不是一件容易的事!

LightBDD提供了一个方便的解决方案,使你的测试场景清晰,编写起来更加轻松!

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android百度地图开发01之初体验

做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一、申请AK(API Key) 要…

php cli swoole mysql_[了解实践]Swoole、PHP与MySQL:连接池,swoole扩展实现真正的PHP数据库连接池。...

背景:swoole的出现,包括PHP出现前,在新浪企业邮箱就有基于Sun Solaris 系统上面用c写Mysql的长连接,那时候的长连接是基于RPC实现,对mysql那一端形成一个远程过程的调用,通过XDR数据结构进行解析mysql传来的…

会按摩的充气颈枕,只占行李箱一个角,却能让你的脖子爽到爆

▲ 点击查看出差、旅游、探亲,舟车劳顿的路上,想要休息实在太难。临近国庆,有多少人准备外出旅游、回家或者出差的?然而在舟车劳顿的路上,想要休息一下,不要太难。睡到一半撞到车窗痛醒,不小心歪…

转:编写高效的Android代码

毫无疑问,基于Android平台的设备一定是嵌入式设备。现代的手持设备不仅仅是一部电话那么简单,它还是一个小型的手持电脑,但是,即使是最快的最高端的手持设备也远远比不上一个中等性能的桌面机。 这就是为什么在编写Android程序时要…

給定周中的特定天

转:給定周中的特定天 另一個常見的需求是,僅在每月中的特定星期數運行。例如,可能希望在每個月的第一個星期一或星期五運行一個報告。為了完成此任務,可以使用與上面類似的過程。對於給定周中的任何天,它一定屬於以下日期範圍之一…

Envoy实现.NET架构的网关(一)静态配置与文件动态配置

什么是Gateway在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题如果没有 API 网关模式,客户端应用将与内部微服务相耦合。在客户端应用中,单个页面/屏幕可能需要多次调用多个服务。 如果没…

corosync和pacemaker实现httpd和mysql双集群

一、环境介绍:三台均为双网卡:openstack-control.example.com openstack-control eth0:172.16.171.100eth1:10.1.1.100 openstack-nova.example.com openstack-novaeth0:172.16.171.110eth1:10.1.1.110openstack-neutron.example.com openstack-neutrone…

25岁男生要有多少存款才能让女友满意?

1 男女观念差异这么大的吗?▼2 演绎人生从落魄到适应再到悠哉的三个阶段▼3 牌子大,了不起咯~▼4 这鬼才文案用在这里屈才了▼5 狗子:你就说,我演的哪里不像?▼6 7个月一点没变我觉得已经蛮厉害得了▼7 不小心跟…

查看mysql数据库历史_查看mysql数据库历史

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

IT学习--学习不一定要用在现实工作中

很多人在学习知识的时候总是说这个学了没用,这个学了用不上,所以很多人就干脆不学。今天就站在我个人观点上对这个问题进行讨论 以考CCIE为例,有些工作经验的考生会对自己的工作有个的认识,知道自己哪些知识是工作上用得上的&…

心得9--jsp设计模版

1.常用的面向对象设计模式有4种: Factory模式、Singleton模式、Facade模式和MVC架构模式。 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSPJavaBean模式,一种是ServletJSPJavaBean(MVC)模式。 JSP设计模…

C# 泛型的使用

01—泛型概述泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据的类型来进行参数化。泛型能在编译时提供强…

80040e14 mysql_【ASP】提示错误80040e14

是的,提示Cls_vbsPage.asp 行164 有问题,整个代码如下:Class Cls_vbsPagePrivate oConn 连接对象Private iPagesize 每页记录数Private sPageName 地址栏页数参数名Private sDbType数据库类型,AC为access,MSSQL为SQL SERVER2000…

在数学世界,都有这些美妙的数学公式是你不认识的......

全世界只有3.14 % 的人关注了爆炸吧知识什么是数学?华罗庚说:宇宙之大,粒子之微,火箭之速,化工之巧,地球之变,生物之谜,日用之繁,无处不用数学......回首往昔&#xff0c…

Android MediaScanner:(一)MediaScanner总体架构

Android MediaScanner:(一)MediaScanner总体架构 分类: Android android.multimedia2012-05-19 18:29 5050人阅读 评论(5) 收藏 举报androidservice数据库工作interfaceinsert田海立csdn 2012-05-19 本文是笔者的分析归纳&#xf…

协变和逆变

http://msdn.microsoft.com/zh-cn/library/vstudio/dd997386.aspx转载于:https://www.cnblogs.com/mingyongcheng/archive/2012/11/15/2771568.html

报表系统FineReport通过权限控制数据访问方案

2019独角兽企业重金招聘Python工程师标准>>> 问题:实际应用环境中,不同角色的人可能对数据具有不同的访问权限,通过直接在SQL语句中筛选出需要的数据制作模板可以解决该需求,但对于角色较多的情况,就需要制…

SkyWalking配上告警更优秀

前言对于监控系统来说,不可能让人一直盯着监控看板,而更多的是以自动提醒的方式,比如邮件、短信或微信推送等,当达到或超出预设的告警指标时,就自动发送消息提醒,下面就来说说如何配置SkyWalking的告警。正…

python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法

本文实例讲述了Python实现Sqlite将字段当做索引进行查询的方法。分享给大家供大家参考,具体如下:默认从sqlite中获取到的数据是数字索引的, 在开发阶段经常有修改数据库所以显得不太方便, 其实在python源码里就有解决方案, 直接读sqlite3的源码, 摸索了一…

神抓拍!2020搞笑野生动物摄影大赛,哈哈哈哈哈笑到头掉

全世界只有3.14 % 的人关注了爆炸吧知识图片来自CWPAs 2020小动物们到底能有多好玩让我们来看看今年的搞笑野生动物摄影大赛吧保准叫你从头笑到尾(以下是入围作品)“飚自行车的”猴看起来像个酷猴▲摄影:Yevhen Samuchenko真情实感演绎“我太…