SpecFlow使用入门之C# BDD

SpecFlow使用入门

http://www.specflow.org/

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

一、不直接通过网页的测试。

什么叫不直接通过网页的测试?

我们知道,一般对页面测试,通常对各种按钮点击是少不了的,就像这个一样:

SpecFlow使用入门之C# BDD

你至少要点一个Register吧。

那么我们暂时就不要这样做(项目太大的话,打开网页也是一件耗时间的事情)所以这里我们不从页面上来测,用一种类似测路由的方式来做。

1.首先,新建一个MVC3项目。使用默认配置

SpecFlow使用入门之C# BDD

2.下载三个工具:SpecFlow,NUnit,SpecFlow的VS扩展插件

其中前两个可以使用nuget下载,而VS tool的扩展(比如:TechTalk.SpecFlow.Vs2010Integration)在这里

http://visualstudiogallery.msdn.microsoft.com/9915524d-7fb0-43c3-bb3c-a8a14fbd40ee

3.安装完上述的工具后,右键项目,添加Feature文件。

SpecFlow使用入门之C# BDD

4.打开他,完成我们的第一个场景

Scenario1:当浏览注册页面时

SpecFlow使用入门之C# BDD

典型的BDD语法风格,如果每一个用例都可以写的如此清楚,那么对于业务的开展会十分有利。

这里说明:关于BDD可以没有Give(Establish),但When(Because)是必需的

5.右键Scenario,生成Step。

SpecFlow使用入门之C# BDD

SpecFlow使用入门之C# BDD

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

6.完成测试

SpecFlow使用入门之C# BDD

对页面测试,所以要引用MVC的类库。

说明一下:这里引用了FluentAssert,所以你看见的测试语法是这样的(因为好用)。实际上还是NUnit的测试。

7.运行

SpecFlow的运行没有绿点给你点,不过不要紧,右键一下,Run SpecFlow就可以了。

SpecFlow使用入门之C# BDD

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

SpecFlow使用入门之C# BDD

从这里你可以看见,不通过页面测试可以在一定程度上的减少我们打开整个项目的时间,除此之外,你还需要对你的项目有非常的了解,以至于你不用打开页面就知道这个页面该做什么,以及怎么做,另外还要了解MVC的部分机制,是一件比较消耗脑力的事情。

附:SpecFlow有一个不太好的地方,它需要和NUnit集成,因此选择这个工具,你和你的团队需要权衡一下。

二、使用参数

ok,上次测了一个页面返回的情况(甚至连返回的是哪一个页面都没测,光测了一个类型,当然不可靠),现在测这个页面是不是我们要的那一个。

当然,在这里需要利用一些数据来判断这个返回的页面是不是我们要的那个,所以需要加一些东西在AccountController的Register方法里面。

比如接下来这个简单的。

1.首先在controller的方法中,写入一个"数据"

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

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

SpecFlow使用入门之C# BDD

我们添加了一个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. }

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

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

使用TeamCity对项目进行可持续集成管理(一)

一、可持续集成管理

 

持续集成,CI:即Continuous integration。

可持续集成的概念是基于团队(小组)协作开发而提出来的,为了提高团队开发效率与降低集成风险(早发现,早解决。晚发现,解决更麻烦<1>),各种可持续集成的管理平台应运而生,这里介绍其中一种小而实用的平台管理工具——TeamCity。

注<1>:关于其优点在这里举一个例子:

团队协作开发必不可少的需要一个版本控制工具,如svn;对于每一个版本,我们都是需要提交在服务器上的,而每次因为各自人员的工作不一致,会有一定可能造成隐式的冲突问题,最简单的例子就是:“明明在我的机子上可以编译通过啊!为什么在你机子上(update)就不行了?!”

这正是因为缺少了一个可以用来检查服务器版本的工具(当然如果会,也有专人检查),尤其到了后期,每一次提交(集成)的信息量都是非常大的,一旦服务器版本出了问题,那么对整个团队的影响是非常明显的,至少团队的开发效率降低了下来,并需要调试错误。

于是“早发现,早解决”确实是一个有效降低大风险的工作。

二、什么是TeamCity

 

TeamCity是一款功能强大的持续集成(Continue Integration)工具,包括服务器端和客户端,目前支持Java,.Net项目开发。 TeamCity提供一系列特性可以让团队快速实现持续继承:IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等,所有的这些,都是 让你的团队快速享有持续继承带来的效率提升、高质量的软件保障。

三、TeamCity工具入门

 
【不能理解csdn为什么没办法传大图上来?宽度超过了,就不显示了,不会弄,各位看不清的可以放大了看】
 
这里将简单介绍TeamCity环境的搭建与配置,不介绍安装过程(通常来说,每一次点下一步就可以了)。
1、首页
安装好TeamCity后,在你设定的端口中打开首页(如localhost:8001,或者服务器端口),你可以看到如下的界面,由于我的是已经有项目的首页,所以你看见的可能如下图不太一样。不过没关系,在你首次安装TeamCity之后,它的首页将会有设置向导告诉你怎样新建出你的第一个项目。
SpecFlow使用入门之C# BDD
 
还没有找到如何新建的设置向导?没关系,请点击右上角的管理员账户,它将带领你新建出一个新的Project
SpecFlow使用入门之C# BDD
 
2,创建一个新项目,第一步,给你的项目命名,并点击create
SpecFlow使用入门之C# BDD
 
3,创建完项目后,可以设置配置环境了,如下图所示,我们创建一个新的编译环境。SpecFlow使用入门之C# BDD
 
4,非常简单的页面,需要注意的是Build counter这个属性,它会显示你使用这个project进行集成编译的次数,因此在测试完成后你可以清除掉它(置1),在今后的实际管理中根据,编译次数是一个体现团队集成完成速度的量。完成后点VCS setting。SpecFlow使用入门之C# BDD
 
5,VCS setting,配置你的服务器版本路径。SpecFlow使用入门之C# BDD
 
6,我选择svn,实际情况根据你使用的工具来选择SpecFlow使用入门之C# BDD
 
7,在下面配置完成你需要的属性,图比较大没截全,在最下面有一个TEST按钮,可以测试是否连接上了服务器的项目地址。SpecFlow使用入门之C# BDD
 
8,完成配置后,注意到现在的VCS界面和之前的不同,因为你已经创建好了一个根了,选择你配置好的根,接下来配置编译环境(Build Setup)
 
SpecFlow使用入门之C# BDD
 
9,在编译环境中,我选择使用第三方编译工具——NAnt,为什么选择它等下解释。(使用NAnt,可以参考我的另一篇NAnt安装与入门
配置路径(因为配置好了VCS的root,因此可以通过choose来选择编译项目的path),配置NAnt的环境变量(安装它的位置),因个人安装位置而异SpecFlow使用入门之C# BDD
 
10,配置完成后,你就可以点击run了(也就是变成了第一张图首页的样子),它会在服务器上跑起来,并且提供详细的数据给你观察SpecFlow使用入门之C# BDD
 
11,为什么不选择使用VS自带的编译器来编译呢?原因有二:
一,你不能保证公司里每一台服务器上都安装有VS的IDE,因为VS的IDE非常“巨大”!所以有理由不在服务器上安装一个可能会对服务器造成性能影响的工具。
二,编译速度慢!VS的编译速度由于它IDE本身的“巨大”,导致运行起来很慢(因为有很多工作会同时进行,但相对的,它提供的编译数据也是最完善的)
最后上一张VSIDE编译的图与NAnt的来比较:(我们的服务器年代比较久远了)SpecFlow使用入门之C# BDD,同样效果立竿见影14s对62sSpecFlow使用入门之C# BDD
更多
上一篇:Hadoop的数据压缩


下一篇:The Truth About Threads(关于线程的真相 )