使用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) 要…

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

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

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 不小心跟…

心得9--jsp设计模版

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

C# 泛型的使用

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

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

全世界只有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…

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

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

SkyWalking配上告警更优秀

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

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

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

绝不翻车珍珠奶茶做法

1 如何在家自制珍珠奶茶▼2 儿子,妈妈给你烤小饼干哦▼3 放假太久了连自己哪个班都忘了▼4 想问下,鸟是在哪都能起窝吗?▼5 不到万不得已,绝不去做▼6 这个店名太童年阴影了▼7 小鸡做错了什么?▼你点的每个赞&…

施一公:“中国式科研”误国误民!表面上一片繁荣,实则深藏危机

全世界只有3.14 % 的人关注了爆炸吧知识论文和科技实力是两回事在全国政协十三届一次会议上,中国科学院院士、清华大学原副校长施一公曾说道:“我以前曾经预测,中国会在2020年论文数超过美国,没想到我们提前完成了。”但面对这项数…

正确使用和理解C#中的闭包

定义 我们把在Lambda表达式(或匿名方法)中所引用的外部变量称为捕获变量。而捕获变量的表达式就称为闭包。捕获变量 捕获的变量会在真正调用委托时“赋值”,而不是在捕获时“赋值”,即总是使用捕获变量的最新的值。如下代码所示,调用委托时&a…

重磅公开!36个高考数学破题大招

前段时间,超模君发了关于极值点偏移问题的总结资料,朋友们都觉得内容整合得十分详细。同时,也有不少很多朋友留言说希望有其他高考数学常考问题的解题总结。确实,毕竟高考涉及的内容非常多,比如说参数范围问题、数列求…

Linux服务器数据备份

2019独角兽企业重金招聘Python工程师标准>>> 服务器上的数据是如此重要,以至于我们定期要对其进行备份!这里讲一下mysql的备份和使用rsync同步服务器上的文件,从而实现多台linux服务器之间的文件的备份。 一 Mysql备份 mysql的备份…

与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......

全世界只有3.14 % 的人关注了爆炸吧知识从武汉新冠疫情爆发到如今,陈薇没有一天休息。短短半年间,54岁的她头发从黑到白,也哭了好几次。刚去武汉-现在陈薇的母亲也在电视上看到了女儿的变化:“她变老了,都有白头发了。…

Centos-启动network报错RTNETLINK answers: File exists解决方法

背景:今天在Vcenter上,用模板克隆了一个虚拟机,启动之后,网卡启动不了,报错如下:RTNETLINK answers: File exists说明: 环境 Centos6.6_X64 ; 网卡两个原因: 由于用模板…

不当败家子的原因......

1 实在是太真实!▼2 有钱就是可以为所欲为(素材来源网络,侵删)▼3 在哪都要有仪式感!▼4 送自己去孤儿院......▼5 万万没想到...(图源网络,侵删)▼6 这都能催的?▼…