SpecFlow使用入门

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

  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. }

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

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

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

SpecFlow使用入门之C# BDD的更多相关文章

  1. [转]SpecFlow使用入门

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

  2. C# 使用SpecFlow创建BDD测试用例

    将自然语言编写的测试用例转换为可执行的测试,可以大大降低需求与开发之间的沟通成本,这是BDD(行为驱动开发)希望达到的效果.SpecFlow是.Net平台的BDD工具,可以帮助我们创建面向BDD的测试 ...

  3. SpecFlow - Cucumber for .NET

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

  4. BDD

    Binding business requirements to .NET code http://www.specflow.org/ 行为驱动开发 BDD:Behavior Driven Devel ...

  5. 一系列令人敬畏的.NET核心库,工具,框架和软件

    内容 一般 框架,库和工具 API 应用框架 应用模板 身份验证和授权 Blockchain 博特 构建自动化 捆绑和缩小 高速缓存 CMS 代码分析和指标 压缩 编译器,管道工和语言 加密 数据库 ...

  6. BDD敏捷开发入门与实战

    BDD敏捷开发入门与实战 1.BDD的来由 2003年,Dan North首先提出了BDD的概念,并在随后开发出了JBehave框架.在Dan North博客上介绍BDD的文章中,说到了BDD的想法是 ...

  7. BDD实战篇 - .NET Core里跑Specflow - 可以跑集成测试和单元测试

    这是<如何用ABP框架快速完成项目 >系列中和DevOps系列文章其中一篇文章.   BDD很赞!比TDD先进很多,能够大大提高编码效率.   上一篇文章说了如何在.NET Core里安装 ...

  8. BDD实战篇 - 在.NET Core下安装Specflow

    这是<如何用ABP框架快速完成项目 >系列中的一篇文章. BDD很赞!比TDD先进很多,能够大大提高编码效率. 让我们动手起来吧!先在.NET Core下安装Specflow! 官网教程在 ...

  9. SpecFlow教程--快速入门

    原文http://www.specflow.org/getting-started/ 一.安装 为了能正确安装SpecFlow所需要的东西,你必须安装集成IDE的插件以及设置你的项目使用SpecFlo ...

随机推荐

  1. C++ 虚函数表决心

    C++ 虚函数表解析 xml:namespace prefix = o /> 陈皓 http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制. 关 ...

  2. 银联+移动+三星PK微信、余额宝

    在不远的将来,你可以扔掉钱包,扔掉信用卡,揣着手机买东西. 银联.移动.三星这些不同的行业大佬,因为这个目标,被一款名叫NFC的支付技术连接在了一起. 这场游戏的参与者众多,一个合纵连横的时代正在到来 ...

  3. Android4.4 Framework分析——startService创建过程

    我们经常使用context.startService()要启动service.下面就来分析这service启动过程,下图是service启动序列图: watermark/2/text/aHR0cDov ...

  4. 华为G520联通版刷机包 基于MIUI CM11新 平稳 稳定

    ROM介绍 刷先配置双卡:"设定-安卓原生设置-双卡套-配置订阅",否则,无信号 使开发人员选项方法:"设定-安卓原生设置-关于手机-发布"连续点击版本 启用A ...

  5. Swift语言指南(六)--可选值

    原文:Swift语言指南(六)--可选值 在值可能不存在的情况下使用可选值(optional), 可选值是: · 存在一个值,这个值等于 x 或 · 不存在任何值 注: 在 C 和 Objective ...

  6. 如何清除应用程序承载 WebBrowser 控件时缓存

    原文:如何清除应用程序承载 WebBrowser 控件时缓存 http://support.microsoft.com/kb/262110/zh-cn察看本文应用于的产品 function loadT ...

  7. The Swift Programming Language-官方教程精译Swift(1)小试牛刀

    通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”.在 Swift 中,可以用一行代码实现:  println("hello, world") 如果你 ...

  8. MVC 5 Scaffolding多层架构代码生成向导开源项目

    asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)   Visual Studio.net 2013 asp.net MVC 5 Scaffolding代码 ...

  9. VS2013中实现angular代码智能提示

    第一步:在项目同添加angular js文件的引用: 这里使用NuGet包管理器来给项目添加angular js install-package angularjs 第二步:添加智能提示js文件 我们 ...

  10. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...