SpecFlow使用入门

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的方法中,写入一个"数据"

  1. public ActionResult Register()
  2. {
  3. ViewData["Title"] = "Register";
  4. return View();
  5. }

2.测试的时候直接测到它,但是注意,此时我们的Scenario稍微改了一下

我们添加了一个And,在属于cucumber一类的BDD语言风格中,And同表上一个,也就是这个And表示Then。我们又给这个场景添加了一个结果,然后把这个结果用参数的方式传入测试代码中。

测试:

  1. [Binding]
  2. public class 浏览注册页面
  3. {
  4. private ActionResult result;
  5. private AccountController controller;
  6. [When(@"用户进入注册页面")]
  7. public void When用户进入注册页面()
  8. {
  9. result = controller.Register();
  10. }
  11. [Then(@"注册页面会显示")]
  12. public void Then注册页面会显示()
  13. {
  14. result.Should().BeOfType<ViewResult>();
  15. }
  16. //使用正则表达式来匹配参数
  17. [Then(@"页面的Title是""(.*)""")]
  18. public void Then页面的Title是(string p0)
  19. {
  20. ((ViewResult) result).ViewData["Title"].Should().Be(p0);
  21. }
  22. }

可以发现冒号 “” 是用来选择参数的。

利用这个非常简单的(也是很笨的方法),我们测到了想要的结果。

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的更多相关文章

  1. SpecFlow

    SpecFlow http://blog.csdn.net/yujunwu2525/article/details/7839859 将业务需求与.NET代码结合起来 SpecFlow旨在弥合领域专家与 ...

  2. SpecFlow使用入门之C# BDD

    SpecFlow使用入门 http://www.specflow.org/ SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了 ...

  3. [转]SpecFlow使用入门

    SpecFlow是一个BDD工具,在这里对BDD不多赘述,你可以阅读一下微软2010年十二月的一篇文章,此外如果你想要更多了解SpecFlow,可以参考我的另一篇翻译(当然,也可以直接进入官网) 一. ...

  4. VS2010中使用 SpecFlow + Selenium.WebDriver

    安装(VS扩展.程序包) [工具]->[扩展管理器],安装SpecFlow [工具]->[库程序包管理]->[程序包管理器控制台] PM> Install-Package Sp ...

  5. Cucumber(一): Preparation

    Every time I wrote some code in ruby and executed our cucumber features I craved for something simil ...

  6. Windows建立Cucumber和Ruby测试环境

    1. 下载安装Ruby1.9.3, 不要用RubyInstall 一键安装,下载zip然后解压到c:\Ruby193 (不要用2.0,用2.0安装不成功,不要怪我) 2. 环境变量配置RUBY_HOM ...

  7. Cucumber测试驱动开发

     Cucumber是一种BDD实践开发工具,属于敏捷开发的组成部分.      在敏捷开发中,对用户进行需求分析时,不是像传统的P&D的开发方式,首先编写大量的用户需求分析文档,而是通过一个个 ...

  8. Ruby Cucumber环境

    1.http://rubyinstaller.org/downloads 下载rubyinstaller以及developmentkit(注意版本号要对应) 2.安装rubyinstaller以及解压 ...

  9. Cucumber语法及测试用例<一>

    工作原因,最近一直在研究cucumber的 语法以及它和java之间的关系.鉴于是初学者且代码基础薄弱,我开始摸索前行,感谢分享博客且也在一路前行的人儿们. 1.基本语法为:此处举例两种区别一看即知- ...

随机推荐

  1. tomcatserver解析(六)-- Acceptor

    Acceptor负责用来管理连接到tomcatserver的数量,来看看Acceptor在tomcatserver中的应用,是怎样实现连接管理的,socket连接建立成功之后,是怎样实现内容的读写的( ...

  2. hibernate 双向n-n

    领域模型: 关系数据模型 双向 n-n 关联须要两端都使用集合属性 双向n-n关联必须使用连接表 集合属性应添加 key 子元素用以映射外键列, 集合元素里还应添加many-to-many子元素关联实 ...

  3. RestServer 1.1发布

    具体配置方法参照第一版:http://www.cnblogs.com/devgis/p/4947191.html BUG反馈 QQ:80163278 邮箱:devgis@qq.com 淘宝:http: ...

  4. MVC中使用SignalR

    MVC中使用SignalR打造酷炫实用的即时通讯功能附源码   前言,现在这世道写篇帖子没个前言真不好意思发出来.本贴的主要内容来自于本人在之前项目中所开发的一个小功能,用于OA中的即时通讯.由于当时 ...

  5. oracle中execute immediate的使用(select/insert/update/delete)(转)

    execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...

  6. TreeMap cannot be cast to java.lang.Comparable

    /** * Constructs a new, empty tree map, using the natural ordering of its * keys. All keys inserted ...

  7. linux下一个eclipse组态jdk

    今天ubuntu12.04安装eclipse,安装该想法eclipse后.还需要配置jdk.但没想到eclipse我有自己主动做好(但最主要的原因是我的linux在刚刚安装了一个jdk,假设有两个或更 ...

  8. 终于会用c#中的delegate(委托)和event(事件)了

    一.开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那.好了,那今天就趁月黑风高的夜晚简单来谈谈delegate和e ...

  9. 抓取数据同步备份hive

    1:创建表 CREATE external TABLE `tbl_spider`( `url` string, `html` string ) partitioned by ( `site` stri ...

  10. crawler_http关闭连接

    1:ps aux|grep Spider4Test.jar 查看端口 2: lsof  -p [端口号] 在爬虫运行期间如果看到 大量的 TIME_WAIT  WAIT_CLOSE 说明请求关闭阻塞[ ...