SpecFlow使用入门之C# BDD
http://www.specflow.org/
SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了解SpecFlow,可以参考我的另一篇翻译(当然,也可以直接进入官网)
一、不直接通过网页的测试。
什么叫不直接通过网页的测试?
我们知道,一般对页面测试,通常对各种按钮点击是少不了的,就像这个一样:

你至少要点一个Register吧。
那么我们暂时就不要这样做(项目太大的话,打开网页也是一件耗时间的事情)所以这里我们不从页面上来测,用一种类似测路由的方式来做。
1.首先,新建一个MVC3项目。使用默认配置

2.下载三个工具:SpecFlow,NUnit,SpecFlow的VS扩展插件
其中前两个可以使用nuget下载,而VS tool的扩展(比如:TechTalk.SpecFlow.Vs2010Integration)在这里
http://visualstudiogallery.msdn.microsoft.com/9915524d-7fb0-43c3-bb3c-a8a14fbd40ee
3.安装完上述的工具后,右键项目,添加Feature文件。

4.打开他,完成我们的第一个场景
Scenario1:当浏览注册页面时

典型的BDD语法风格,如果每一个用例都可以写的如此清楚,那么对于业务的开展会十分有利。
这里说明:关于BDD可以没有Give(Establish),但When(Because)是必需的
5.右键Scenario,生成Step。


它会自动生成一个Pending的测试,是忽略的,所以接下来:
6.完成测试

对页面测试,所以要引用MVC的类库。
说明一下:这里引用了FluentAssert,所以你看见的测试语法是这样的(因为好用)。实际上还是NUnit的测试。
7.运行
SpecFlow的运行没有绿点给你点,不过不要紧,右键一下,Run SpecFlow就可以了。

看我们BDD风格的测试内容:

从这里你可以看见,不通过页面测试可以在一定程度上的减少我们打开整个项目的时间,除此之外,你还需要对你的项目有非常的了解,以至于你不用打开页面就知道这个页面该做什么,以及怎么做,另外还要了解MVC的部分机制,是一件比较消耗脑力的事情。
附:SpecFlow有一个不太好的地方,它需要和NUnit集成,因此选择这个工具,你和你的团队需要权衡一下。
二、使用参数
ok,上次测了一个页面返回的情况(甚至连返回的是哪一个页面都没测,光测了一个类型,当然不可靠),现在测这个页面是不是我们要的那一个。
当然,在这里需要利用一些数据来判断这个返回的页面是不是我们要的那个,所以需要加一些东西在AccountController的Register方法里面。
比如接下来这个简单的。
1.首先在controller的方法中,写入一个"数据"
- public ActionResult Register()
- {
- ViewData["Title"] = "Register";
- return View();
- }
2.测试的时候直接测到它,但是注意,此时我们的Scenario稍微改了一下

我们添加了一个And,在属于cucumber一类的BDD语言风格中,And同表上一个,也就是这个And表示Then。我们又给这个场景添加了一个结果,然后把这个结果用参数的方式传入测试代码中。
测试:
- [Binding]
- public class 浏览注册页面
- {
- private ActionResult result;
- private AccountController controller;
- [When(@"用户进入注册页面")]
- public void When用户进入注册页面()
- {
- result = controller.Register();
- }
- [Then(@"注册页面会显示")]
- public void Then注册页面会显示()
- {
- result.Should().BeOfType<ViewResult>();
- }
- //使用正则表达式来匹配参数
- [Then(@"页面的Title是""(.*)""")]
- public void Then页面的Title是(string p0)
- {
- ((ViewResult) result).ViewData["Title"].Should().Be(p0);
- }
- }
可以发现冒号 “” 是用来选择参数的。
利用这个非常简单的(也是很笨的方法),我们测到了想要的结果。
一、可持续集成管理
持续集成,CI:即Continuous integration。
可持续集成的概念是基于团队(小组)协作开发而提出来的,为了提高团队开发效率与降低集成风险(早发现,早解决。晚发现,解决更麻烦<1>),各种可持续集成的管理平台应运而生,这里介绍其中一种小而实用的平台管理工具——TeamCity。
注<1>:关于其优点在这里举一个例子:
团队协作开发必不可少的需要一个版本控制工具,如svn;对于每一个版本,我们都是需要提交在服务器上的,而每次因为各自人员的工作不一致,会有一定可能造成隐式的冲突问题,最简单的例子就是:“明明在我的机子上可以编译通过啊!为什么在你机子上(update)就不行了?!”
这正是因为缺少了一个可以用来检查服务器版本的工具(当然如果会,也有专人检查),尤其到了后期,每一次提交(集成)的信息量都是非常大的,一旦服务器版本出了问题,那么对整个团队的影响是非常明显的,至少团队的开发效率降低了下来,并需要调试错误。
于是“早发现,早解决”确实是一个有效降低大风险的工作。
二、什么是TeamCity
TeamCity是一款功能强大的持续集成(Continue Integration)工具,包括服务器端和客户端,目前支持Java,.Net项目开发。 TeamCity提供一系列特性可以让团队快速实现持续继承:IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等,所有的这些,都是 让你的团队快速享有持续继承带来的效率提升、高质量的软件保障。
三、TeamCity工具入门











,同样效果立竿见影14s对62s
SpecFlow使用入门之C# BDD的更多相关文章
- [转]SpecFlow使用入门
SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了解SpecFlow,可以参考我的另一篇翻译(当然,也可以直接进入官网) 一. ...
- C# 使用SpecFlow创建BDD测试用例
将自然语言编写的测试用例转换为可执行的测试,可以大大降低需求与开发之间的沟通成本,这是BDD(行为驱动开发)希望达到的效果.SpecFlow是.Net平台的BDD工具,可以帮助我们创建面向BDD的测试 ...
- SpecFlow - Cucumber for .NET
SpecFlow使用入门 SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了解SpecFlow,可以参考我的另一篇翻译(当然, ...
- BDD
Binding business requirements to .NET code http://www.specflow.org/ 行为驱动开发 BDD:Behavior Driven Devel ...
- 一系列令人敬畏的.NET核心库,工具,框架和软件
内容 一般 框架,库和工具 API 应用框架 应用模板 身份验证和授权 Blockchain 博特 构建自动化 捆绑和缩小 高速缓存 CMS 代码分析和指标 压缩 编译器,管道工和语言 加密 数据库 ...
- BDD敏捷开发入门与实战
BDD敏捷开发入门与实战 1.BDD的来由 2003年,Dan North首先提出了BDD的概念,并在随后开发出了JBehave框架.在Dan North博客上介绍BDD的文章中,说到了BDD的想法是 ...
- BDD实战篇 - .NET Core里跑Specflow - 可以跑集成测试和单元测试
这是<如何用ABP框架快速完成项目 >系列中和DevOps系列文章其中一篇文章. BDD很赞!比TDD先进很多,能够大大提高编码效率. 上一篇文章说了如何在.NET Core里安装 ...
- BDD实战篇 - 在.NET Core下安装Specflow
这是<如何用ABP框架快速完成项目 >系列中的一篇文章. BDD很赞!比TDD先进很多,能够大大提高编码效率. 让我们动手起来吧!先在.NET Core下安装Specflow! 官网教程在 ...
- SpecFlow教程--快速入门
原文http://www.specflow.org/getting-started/ 一.安装 为了能正确安装SpecFlow所需要的东西,你必须安装集成IDE的插件以及设置你的项目使用SpecFlo ...
随机推荐
- react.js 从零开始(四)React 属性和状态详解
属性的含义和用法: 1.属性的含义. props=properties 属性:一个事物的性质和关系. 属性往往与生俱来,不可以修改. 2. 属性的用法. <Helloworld name=??? ...
- Sql Server之旅——第五站 确实不得不说的DBCC命令
原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好 ...
- js日期操作
1.最基本的日期操作 var mydate = new Date(); set/get FullYear,Month,Date,Hour,Minutes,Second可以随意拼接 toLocale ...
- mysql_navicat-permium 在Mac下破解方法
首先下载符合当前系统支持的navicat-permium版本,我自己下载的是11.0.16 然后我们开始破解旅程,先要安装上navicat-permium,记住千万不要打开(如果你打开了不好意思,卸了 ...
- 深度解析javascript中的浅复制和深复制
原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...
- Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...
- 【百度地图API】自行获取区域经纬度的工具
原文:[百度地图API]自行获取区域经纬度的工具 摘要:上一章教大家如何建立自己的行政区域地图.这次为大家提供一个,可视化选择区域,并且能自动生成经纬度代码的工具.工具的源代码完全公开,并且做了详尽的 ...
- 代理模式与Android
代理模式(Proxy) 一. 什么是代理模式 先来看看官方的说法,代理模式就是为其它对象提供一种代理,以控制对这个对象的訪问. 看来这个官方的说法的确有点官方,看了还是让人感觉不点不知所措,还是不 ...
- 財智V6.0(完美破解序列号特别版)
財智V6.0(完美破解序列号特别版) 財智V6.0(完美破解序列号特别版) 財智6是眼下唯一在中央台报道的.比較成熟的国产理財软件.能全面管理家庭的日常收入.消费.储蓄 ...
- 导出DBF,并且提供下载 .
原文:导出DBF,并且提供下载 . 导出DBF,并且提供下载 #region Declare string mFilePath = MapPath("../DataTmp/"); ...