SpecFlow使用入门之C# BDD

时间:2021-11-30 04:39:04

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
更多

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

  1. &lbrack;转&rsqb;SpecFlow使用入门

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

  2. SpecFlow - Cucumber for &period;NET

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

  3. BDD

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

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

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

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

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

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

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

  7. BDD实战篇 - 在&period;NET Core下安装Specflow

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

  8. SpecFlow教程--快速入门

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

  9. BDD 与DSL 入门

    正文: Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者.QA和非技术人员或商业参与者之间的协作.在了解Behavior Driv ...

随机推荐

  1. 【BZOJ-2669】局部极小值 状压DP &plus; 容斥原理

    2669: [cqoi2012]局部极小值 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 561  Solved: 293[Submit][Status ...

  2. Java对文件及文件夹的操作

    public class FileOperater { // 验证字符串是否为正确路径名的正则表达式 private static String matches = "[A-Za-z]:\\ ...

  3. python15-day1课堂随机

    print("Hello world") #变量定义:一个在内存储存数据的容器#意义:为什么有变量,因为它保存程序执行的中间结果或状态以供后面的低吗进行调用 day1 = 200+ ...

  4. Duff策略

    Tom Duff首先在C语言中提出了展开循环的构想,所以这种模式被称之为Duff策略.Duff策略背后的思想是每一次循环完成标准循环的1-8次.首先通过数组值得总数除以8来取定循环次数.Duff发现对 ...

  5. 关于xxx&period;h file not found 的问题

    在引用第三方库的时候,经常会遇到xxx.h file not found的问题. 首先,我们要知道在引用第三方的时候,我们使用的第三方的库的类型. .a静态库 使用方式:#import "x ...

  6. 原生端与服务器通过sessionid实现session共享以及登录验证

    注:原生端与服务器建立连接时产生的sessionid会变,跟上一次的不一样,为了保证sessionid一样,所以第一次服务器需要把sessionid返回给原生端,下一次与服务端会话时,原生端需要把这个 ...

  7. JVM内存管理的一些思考

    目录 一. 内存是怎么分配的 二. 方法区 三. java对象的生命周期 四. Class对象是在方法区还是堆中 五.java对象的大小 六. 类加载的初始化阶段 七.Class.forName和Cl ...

  8. JustOj 1036&colon; 习题6&period;11 迭代法求平方根

    题目描述 用迭代法求 .求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001. 输出保留3位小数 输入 X 输出 X的平方根 样例输 ...

  9. 自动化部署必备技能—搭建YUM仓库

    导言: YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库) ...

  10. 面试题26:合并k个排好序的单链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. c ...