目录

介绍

安装SpecFlow

背景

Given, When, Then

代码


  • GitHub下载示例代码

介绍

编写测试可能很无聊,并且利益相关者可以知道您的软件应如何运行。

SpecFlow可以为您提供帮助。这是用于BDD的框架,它使用Visual Studio的扩展程序将用户要求的功能转换为要测试的代码。

SpecFlow允许您用母语编写行为,并以Excel表格等形式显示数据。

安装SpecFlow

您必须在测试项目中安装Visual Studio扩展。安装此程序包,nuget SpecFlow, SpecFlow.Tools.MsBuild.Generation这将从我们的IDE中生成代码,并且SpecFlow.xUnit(如果您使用xUnit)将允许Visual Studio查找specFlow将自动生成的测试。

背景

假设您想通过在线购买为水果和蔬菜仓库创建测试。

但是,请小心正确地分割这些部分,这就是我想继续讨论的内容。

背景是您收集每个测试场景共有的所有信息的部分。例如,用户列表。

Feature: Order and warehouse testing
Background
Given registered users
| UserId   | Name  | Surname | Mail             | Delivery address | City     |
| AJ       | John  | Red     | j.red@red.com    | Down street      | London   |
| MWitch   | Marck | Witch   | Mark.Witch@gl.it | High street      | New york |

如果过于详细,则背景部分可能太大,您只需要针对多种情况编写所需内容即可。

我们可以添加一个@tag ,它允许我们收集特性,就好像它们是在一个名称空间中一样。

@Orders
Scenario: An order is submitted

Given, When, Then

Given:我们描述要测试的动作的先例的位置:

Given The warehouse
| Code | Products | Quantity | Unit of measure | Alert threshold |
| P1   | Tomato   | 150      | Box             | 25              |
| V1   | Wine     | 350      | Bottle          | 40              |

When:我们将触发我们要测试的代码的动作放在何处:

When An order arrives
| User | Product | Quantity |
| AJ   | P1      | 2        |
| AJ   | V1      | 1        |

Then:我们将代码运行时需要发生的所有事情放在哪里。

Then The warehouse contains these products
| Code | Product  | Quantity |
| P1   | Tomato   | 148      |
| V1   | Wine     | 349      |Then the Purchasing Office is notified
| Product under threshold | Quantity | Threshold |

或其他情况:

@Order
Scenario: An order is placed that lowers the quantity of the products under the threshold
Given The warehouse
| Code | Products | Quantity | Unit of measure | Alert threshold |
| P1   | Tomato   | 26       | Box             | 25              |
| V1   | Wine     | 350      | Bottle          | 40              |When An order arrives
| Users| Products | Quantity |
| AJ   | P1       | 2        |
| AJ   | V1       | 1        |Then The warehouse contains these products
| Code | Products | Quantity |
| P1   | Tomato   | 24       |
| V1   | Wine     | 349      |Then the Purchasing Office is notified
| Products under threshold | Quantity | Threshold |
| P1                       | 24       | 25        |

代码

现在,您必须将表绑定到一段代码。

在这里,我们来帮助扩展Visual Studio的规范流程,它将转换为我们输入的所有Given,When,Then方法。从右键单击specflow文件,选择“生成步骤定义”。

您将需要使用它来保存显然是虚构的数据,并使用一个内存数据库,该数据库将为您填充Given。

[Given(@"registered users")]
public void GivenregisteredUsers(Table table) {foreach (var row in table.Rows){sessionManager.AddRecord(new User{UserId = row["UserId"],Name = row["Name"],Surname = row["Surname"],DeliveryCity = row["City"],DeliveryAddress = row["Delivery address"],Mail = row["Mail"]});}}
}

When 将响应一个代码,该代码将调用我们用于下订单的方法:

[When(@"An order arrives")]
public void WhenAnOrderArrives(Table table)
{OrderCore core = new OrderCore(sessionManager);List<<order>order> = new <List><order>();foreach (var row in table.Rows){order.Add(new Order{User = row["User"],Product = row["Products"],Quantity = Convert.ToDecimal(row["Quantity"]),});}result = core.AcceptOrder(order);
}

使用代码:

public OrderResult AcceptOrder(IEnumerable<order> orders)
{var orderResult = new OrderResult();foreach (var order in orders){var product = sessionManager.Query<product>().Single(x => x.Code == order.Product);product.Quantity = product.Quantity - order.Quantity;sessionManager.SaveOrUpdate(product);if (product.Quantity < product.Threshold)orderResult.AlertThresholds.Add(new OrderResult.AlertThreshold{product = product.Name,Quantity = product.Quantity,Threshold = product.Threshold});}return orderResult;
}

在Then中,我们将放置一些代码来检查是否已产生所需的行为。

[Then(@"The warehouse contains these products")]
public void ThenTheWarehouseContainsTheseProducts(Table table)
{var products = sessionManager.Query<Product>();foreach (var row in table.Rows){var product = products.Where(x => x.Code == row["Code"]).Single();Assert.That(product.Quantity == Convert.ToDecimal(row["Quantity"]));}
}[Then(@"the Purchasing Office is notified")]
public void ThenThePurchasingOfficeIsNotified(Table table)
{if (table.Rows.Count == 0)Assert.That(result.AlertThresholds.Count() == 0);else{Assert.That(result.AlertThresholds.Count() == table.Rows.Count);foreach (var row in table.Rows){var product = result.AlertThresholds.SingleOrDefault(x => x.product == row["Products under threshold"]);Assert.That(product != null);Assert.That(product.Quantity == Convert.ToDecimal(row["Quantity"]));Assert.That(product.Threshold == Convert.ToDecimal(row["Threshold"]));}}
}

在构建解决方案时,Visual Studio将找到测试并将其显示在“测试资源管理器”中,您可以在其中运行它们。

示例代码在GitHub上。

SpecFlow的力量相关推荐

  1. 读后感与机翻《从视频中推断力量和学习人类效用》

    以下是研究朱松纯FPICU概念中U(utility)的相关论文记录: 读后感: 作者干了什么事? (1)算法能够预测当人们与物体交互时,身体各个部位(臀部.背部.头部.颈部.手臂.腿等)所承受的力/压 ...

  2. 2018-3-19科学网--贾琳老师《思维力量》笔记摘选(触动自己)

    原文链接: 科学网-思维力量--阅读笔记 - 贾琳的博文 http://blog.sciencenet.cn/blog-455749-1056055.html 1.智力不是智商,智力是一种行为方式.一 ...

  3. 首届腾讯数字安全创新大赛在京启动,挖掘新锐力量推动产业创新

    3月10日,首届腾讯数字安全创新大赛在京正式启动.本次大赛由腾讯安全和中国产业互联网发展联盟联合主办,腾讯安全.KEEN.元起资本.赛博英杰.数世咨询等多家企业联合发起,中国产业互联网发展联盟安全专委 ...

  4. 5G+云网融合,移动云带领开发者释放边缘计算的力量

    在5G浪潮的驱动下,智能设备.自动驾驶.VR/AR等对于实时性.本地性有着较强需求的场景日益丰富,边缘计算应运而生,有效提升了用户体验. 众所周知,边缘计算技术的突破,意味着许多控制将通过本地设备实现 ...

  5. AI一分钟 | 小米MIX 2S将于3月27号发布,搭载骁龙845;张朝阳:在研究区块链 但相信AI的力量

    一分钟AI 华为确认P20系列即将登陆巴黎,AI加成拍照功能更出色 张朝阳:在研究区块链,但相信AI的力量 Waymo无人车新专利,根据乘客身体状况选择合适的路线,可为易晕车乘客选择平坦路线 新款 A ...

  6. 坚持的力量 第十五篇

    第十五篇        漩涡鸣人 从他身上,我看到了进步和向上的力量,经别人推荐,我发现我渐渐的喜欢上了<火影忍者>. 首先,<火影>中的歌曲很有震撼力和穿透力,产生心灵的共鸣 ...

  7. 赛码浪潮笔试题库软件实施岗位_赛码 -HRTechChina中国人力资源科技-向上的力量!...

    "赋能数据,丈量未来"互联网校园招聘交流年会暨赛码IT人才数据白皮书发布会在京成功举办 1月9日由中智赛码主办的"赋能数据丈量未来-互联网校园招聘交流年会暨赛码IT人才数 ...

  8. 李迅雷+但斌+趋势的力量+对话PPT

    李迅雷+但斌+趋势的力量+对话PPT 存量经济时代就按照存量经济的玩法来玩 增量经济时代就按照增量经济的玩法来玩 所谓到什么山唱什么歌 所谓趋势,就是市场运动的大方向,随着经济或市场发展阶段不同,趋势 ...

  9. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(二十六)...

    主办 平顶山市教育体育局 承办 平顶山市教育体育局关心下一代工作委员会 平顶山教育电视台 教育部中国书画等级考试平顶山市招生管理办公室 协办 平顶山市书法家协会 平顶山市美术家协会 一 比赛宗旨 作品 ...

最新文章

  1. bzoj千题计划303:bzoj4827: [Hnoi2017]礼物
  2. SpringBoot各种Controller写法
  3. Windows 下单机最大TCP连接数
  4. C# WPF中添加调试信息查看窗体
  5. 无线业务需求的线路设计以及拓扑图实现
  6. 如果你跟夕小瑶恋爱了...(下)
  7. WebStorm笔记-配置js的webpack识别alias(别名)
  8. JEECG近期会开展培训公开课
  9. 队列Queue:任务间的消息读写,安排起来~
  10. mysql数据库 二十一练习题 及答案 (mysql练习题)
  11. HDU3032_NimOrNotNim解题报告
  12. 凸优化第四章凸优化问题 4.6 广义不等式约束
  13. 命令提示符死亡之ping教程
  14. 小武与论文的bug -CUDA -CUDANN -YOLOV3
  15. Android Studio使用AIDL技术进行SDK开发
  16. 大型3d射击类游戏源码【突击风暴】,中文版本,可私服
  17. 微信小程序真机调试:createEvent is not a function
  18. OpenCV读取文件夹下的图片生成视频(mp4格式)
  19. mydumper的安装与使用
  20. 自媒体内容泛滥,同质化严重!用户已审美疲劳

热门文章

  1. mysql 64位整型_高性能MySQL笔记精简(整数和实数优化)
  2. 获取浏览器高度_鸡哥解读FILECOIN浏览器之幸运值
  3. python从零开始到放弃_Python 协程从零开始到放弃
  4. java.lang.object 下载_java.lang.Object
  5. 元宵节电商促销活动首页PSD分层模板
  6. APP价格标签页面设计灵感!明码标价!
  7. UI设计素材干货|日历也要设计,模板都给你们整理好了
  8. keytool生成证书_基于 TrueLicense 的项目证书验证
  9. c++ 14新的语法特性之返回类型推导
  10. Linux内存管理:内存描述之内存页面page