SpecFlow - Cucumber for .NET
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);
- }
- }
可以发现冒号 “” 是用来选择参数的。
利用这个非常简单的(也是很笨的方法),我们测到了想要的结果。
http://msdn.microsoft.com/zh-tw/library/dn308250.aspx
http://msdn.microsoft.com/zh-cn/magazine/gg490346.aspx
https://github.com/techtalk/SpecFlow
SpecFlow - Cucumber for .NET的更多相关文章
- SpecFlow
SpecFlow http://blog.csdn.net/yujunwu2525/article/details/7839859 将业务需求与.NET代码结合起来 SpecFlow旨在弥合领域专家与 ...
- SpecFlow使用入门之C# BDD
SpecFlow使用入门 http://www.specflow.org/ SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了 ...
- [转]SpecFlow使用入门
SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了解SpecFlow,可以参考我的另一篇翻译(当然,也可以直接进入官网) 一. ...
- VS2010中使用 SpecFlow + Selenium.WebDriver
安装(VS扩展.程序包) [工具]->[扩展管理器],安装SpecFlow [工具]->[库程序包管理]->[程序包管理器控制台] PM> Install-Package Sp ...
- Cucumber(一): Preparation
Every time I wrote some code in ruby and executed our cucumber features I craved for something simil ...
- Windows建立Cucumber和Ruby测试环境
1. 下载安装Ruby1.9.3, 不要用RubyInstall 一键安装,下载zip然后解压到c:\Ruby193 (不要用2.0,用2.0安装不成功,不要怪我) 2. 环境变量配置RUBY_HOM ...
- Cucumber测试驱动开发
Cucumber是一种BDD实践开发工具,属于敏捷开发的组成部分. 在敏捷开发中,对用户进行需求分析时,不是像传统的P&D的开发方式,首先编写大量的用户需求分析文档,而是通过一个个 ...
- Ruby Cucumber环境
1.http://rubyinstaller.org/downloads 下载rubyinstaller以及developmentkit(注意版本号要对应) 2.安装rubyinstaller以及解压 ...
- Cucumber语法及测试用例<一>
工作原因,最近一直在研究cucumber的 语法以及它和java之间的关系.鉴于是初学者且代码基础薄弱,我开始摸索前行,感谢分享博客且也在一路前行的人儿们. 1.基本语法为:此处举例两种区别一看即知- ...
随机推荐
- windows 10 install oracle 12c error:[ INS-30131 ]
"[ INS-30131 ] the Initial Setup That Is Required to Run the Installation Program Validation Wa ...
- Freemarker详细解释
A概念 最经常使用的概念 1. scalars:存储单值 字符串:简单文本由单或双引號括起来. 数字:直接使用数值. 日期:通常从数据模型获得 布尔值:true或false,通常在<#if -& ...
- 一、ExtJS下载使用
ExtJS下载 4.1 版本号: http://www.sencha.com/products/extjs/download/ext-js-4.1.1/1683 3.4 版本号:http://www. ...
- OCP-1Z0-051-标题决心-文章2称号
2. View the Exhibit to examine the description for the SALES table. Which views can have all DML ope ...
- 原子操作(atomic operation)
深入分析Volatile的实现原理 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共 ...
- linux网络编程投票
投票系统 1.说明: 写了一个投票系统.过程是先配置好server,在写一个网上投票功能.要实现网上投票功能. 事实上功能实现还是非常easy的,麻烦一点的在于过程比較繁杂,要做的东西还是挺多的. 2 ...
- Device "/dev/sdg" is not a partition【再续】
之前创建asm磁盘的时候总结过一下错误:http://blog.csdn.net/rhys_oracle/article/details/17029333 当今天情况是这种.例如以下: 在使用open ...
- DWR入门的例子(一个)
DWR(Direct Web Remoting)是WEB远程调用框架.使用这种框架使AJAX发展至今已成为非常easy.使用DWR能client利用JavaScript直接调用服务端的Java方法并返 ...
- ssh无密码登陆(转)
[0]写在前面 由于ssh 实现的是免密码登陆,大致步骤是: 0.1) client通过ssh登陆到server: 0.2) server检查家目录下的.ssh文件, 并发送公钥文件 authoriz ...
- 一个IT学生的personal statement
前一段时间的英语老师要求我们写一个自己的personal statement,我相信,作为一个IT学生,人很多personal statement应该都了如指掌.进一步的研究是必要的出国留学,当然,也 ...