我们如何处理 BDD 场景的微小排列?

2024-02-12

我喜欢 BDD 开发方法,但我遇到了一个问题,即该方法能走多远。这条来自 ThoughtWorks 的最新评论Radar http://thoughtworks.fileburst.com/assets/thoughtworks-tech-radar-march-2012-us-color.pdf让我停顿一下:

“像 Cucumber 这样的行为驱动设计 (BDD) 测试框架的出现,与像 Selenium 这样的浏览器自动化工具相结合,鼓励了在浏览器级别广泛使用验收测试。不幸的是,这鼓励了在运行成本高昂的情况下进行大量测试。测试是最大的,我们应该在适当的级别进行测试,尽可能贴近代码,这样测试才能以最高的效率运行。浏览器级别的测试应该是锦上添花,有验收和单元的支持在适当的层执行测试。”

这是我的场景(双关语):

我有一个基本的 CRUD 应用程序,其业务要求是根据允许最终用户选择的条件过滤显示的数据。为了便于讨论,我们假设这是一个电力公司的应用程序,我正在显示每个客户当前本月至今的用电量。此应用程序的用户可以通过选择单个客户、多个客户、无客户或“所有客户”来缩小数据范围。显示的数据将根据他们的选择而变化。

对于产品利益相关者来说,这些实际上代表了 4 个不同的场景。然而,从开发人员的角度来看,它们实际上是相同的,唯一的区别是传递给数据库的参数。所以问题就变成了:阐明每种排列的好处是否超过运行和维护它们的成本?

我认为 BDD 原则可能会说“是”,因为预期行为的传达更加明确,但我不确定。这对我来说确实有一种矫枉过正的感觉。这些场景可能是大量的复制粘贴和微小的更改。

我倾向于用一个捕获核心业务价值的场景来涵盖此功能(“当我选择客户时,我会看到用电量数据”),然后用一组非基于 UI 的集成测试来涵盖其他排列验证服务/查询返回正确的数据。这种想法有错吗?在不放弃 BDD 优势的情况下,确保涵盖这些场景的最佳答案是什么?


我对 BDD 的规则是,开发人员应该能够轻松地从所描述的任何行为中导出场景,如果不能,则用场景来说明行为。

当 BDD 描述棘手的事情时,它是最有用的。要么向开发人员传递专业知识,要么缩小行为范围,直到发现不确定性。在具有基本过滤器的 CRUD 应用程序中,行为非常容易理解。

你所描述的可能最好地涵盖了丹·诺斯的“姜饼”模式:采用其他东西的配方,但行为的一个方面与另一个方面不同(或者在这种情况下,行为的一个额外的、易于理解的方面) )。他还使用了一点复制粘贴,我特别怀疑这种行为。

所以,你的倾向是完全正确的。如果自动化,我可能只会自动化一个示例,让单元测试和集成测试覆盖其余部分。

我还想知道为什么要进行这个项目。必须有某物有趣的是,否则它不会发生。找到它,它可能是开始讨论场景的好地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们如何处理 BDD 场景的微小排列? 的相关文章

  • 我如何用 behat 制作一个假签名

    测试代码图片 https i stack imgur com oaoU2 png 工作签名图片 https i stack imgur com uW7fL png您好 我正在使用 behat 以及与 mink 集成的 selenium 驱动
  • Cucumber 在运行单个功能时找不到步骤

    我刚刚将 Cucumber 安装到一个新的 Rails 项目中 第一次从头开始设置 并且在运行所有测试时效果非常好 bundle exec cucumber 但当我运行单个功能文件时找不到我的任何步骤 我该如何开始调试这个 rails 3
  • 使用cucumber测试时sql错误无法在事务内启动事务

    我是黄瓜新手 正在学习 BDD 当我尝试填写表单并创建记录时 会显示此 sqlite 错误 尽管当我在浏览器中手动尝试代码时没有错误 我正在使用 Rails 4 这是我的控制器代码 class Admin ItemsController l
  • 无法在虚拟机中运行codeception - 无法找到并加载Mink

    我安装了 vm ubuntu 来宾操作系统 我的应用程序正在从我的主机操作系统中的浏览器运行 网址为 http abc localhost 8888 http abc localhost 8888 我输入 php codecept phar
  • JSpec 不再受支持?

    来自 Ruby 社区 我正在寻找 Javascript Node js 的 BDD 测试框架 我是 JSpec 并且认为它是正确的选择 因为我在 Ruby 中使用了 RSpec 但在他们的 GitHub 页面上http github com
  • 技术实现细节如何编写User Stories? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试以更有组织的方式工作并开始采用用户故事 我认为我对如何将用户故事用于技术内容存在误解 假设我正在编写一个应用程序 它可以提供我的网站在
  • 黄瓜的路由问题

    我正在使用 Rails 3 和 Cucumber 除了这个小问题之外一切都很顺利 Given I am on the edit automobile page No route matches controller gt automobil
  • Cucumber IDE 可以自动完成功能编写吗?

    有没有Eclipse插件可以用来写黄瓜的特点 http github com aslakhellesoy cucumber wiki feature introduction具有自动完成功能 我想从其他功能中找到并重用步骤会很好 有任何想法
  • Maven + Cucumber-jvm - 如何根据环境运行不同的功能子集

    我正在努力实现这一目标 我想配置一个 Maven 项目 以便它根据所选配置文件运行不同的 Cucumber 功能子集 dev pro 例如 我有几个功能文件来测试网络导航 使用标签来指定环境 PRO pro Feature Nav Pro
  • NightwatchJS .elements 返回字符串而不是对象

    我正在使用 nightwatch 并尝试迭代元素列表 但是 当我没有获取对象或元素时 但我得到了一个字符串数组 CODE browser elements css selector ele function r browser perfor
  • 单元测试与验收测试

    你支持其中之一吗 或两者 我的理解是单元测试 从开发人员的角度验证系统 帮助开发者实践TDD 保持代码模块化 协助检测低粒度的错误 验收测试 从业务和 QC QA 角度验证系统 往往是高级别的 因为它们通常是由不熟悉代码内部工作原理的人编写
  • 功能规格和视图规格之间有什么区别吗?

    我有一个关于水豚干燥度的问题here https stackoverflow com questions 35255786 what is the correct usage of within method in capybara 352
  • 如何在 Visual Studio 中获得 .feature 文件的 Gherkin 语法突出显示?

    默认情况下 Feature Scenario Given When Then 等关键字不会突出显示 是否有现成的模板可以实现此目的 最新版本SpecFlow http www specflow orgVS2010有一个内置的语法高亮
  • 如何使用 MSTest 从命令行运行 SpecFlow 场景?

    我有 Visual Studio 2010 并且我们有两个使用的 VS 解决方案 第一个是 Web 应用程序 第二个是严格用于 SpecFlow 测试 同时运行两个 Visual Studio 实例来运行 SpecFlow 功能会占用所有可
  • 多语言集成测试框架

    想象一下 您有一个由不同组件组成的相当复杂的面向服务的体系结构 组件是用不同的语言 Java PHP Ruby 编写的 并以不同的方式相互通信 即 UI REST API 在某些情况下共享一些数据库表等 我正在尝试为一些端到端测试设计一个集
  • 茉莉花单元测试 - 测试对象的未定义属性

    我有以下声明 expect A BAR name toEqual foo 由于我的对象 A 具有顶级属性 BAR 并且 bar 具有值 foo 传递 我想测试我的结构以确认属性 NONEXISTINGPROP 尚未定义 例如 expect
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 使用 xctool 运行单个 KIWI 规范

    有没有人能够成功地将 KW SPEC 变量传递给 xctool 我正在尝试使用以下命令来运行单个 KIWI 规范https github com kiwi bdd Kiwi wiki Kiwi FAQ q how do i run a si
  • rspec中的分配意味着什么

    这行代码的作用是什么 assigns articles should eq article 在以下 rspec 中 describe GET index do it populates an array of articles do art
  • ATDD 与 BDD 以及框架的正确使用

    我刚刚开始了解 BDD 的概念 并且已经听了 Scott Bellware 与 Herding Code 人员的演讲 我一直在尝试使用 SpecFlow 并且非常喜欢它 我了解博客文章中描述的 ATDD 和 TDD 之间的区别BDD 工具分

随机推荐

  • 根据原始列名称重命名列 R

    我有一个与此类似的数据框 事实上 for 循环中有 16 个 head data A tibble 1 x 4 AAA AAC AB AC 1 18 25 39 9 2 20 25 30 7 我想根据列的原始名称动态更改所有列名称 如下所示
  • 如何将 int 转换为 QString?

    有没有QString函数需要一个int并将其输出为QString Use QString number http doc qt io qt 5 qstring html number int i 42 QString s QString n
  • 是否可以在 Selenium 和 Chrome 网络驱动器上禁用加载图像(仅限 jpg 和 png)?

    在我努力提高硒测试应用程序的性能时 我想知道是否可以避免加载某些文件 例如图像 jpg 和 png 参数 disable images 禁用所有图像 包括 gif 在我看来 它可以是谷歌分析标签 我必须捕获它 是的 您可以通过指定来做到这一
  • React Native - 从库项目中,如何导入和使用包的模块

    我使用创建了一个 React Native 库项目react native create library命令为我的开发提供更加模块化的环境 因此稍后我可以将该库用于多个正在进行的应用程序项目并消除代码重复 对于 Java 它非常适合外部应用
  • Active Directory 中在线的计算机列表

    我使用这段代码输出网络上所有计算机的列表 语言是 jscript net 但这只是 C 的一个小操作 var parentEntry new DirectoryEntry parentEntry Path WinNT for var chi
  • 时刻未向从 javascript 日期创建的对象添加分钟

    我有一个方法 它接受带有时间的 javascript 日期作为输入 并确定当前日期和时间是否在 30 分钟内 但是 当我在运行时调试它时 moment add 似乎没有按预期工作几分钟 function isWithinRange myDa
  • Swift === 与 nil

    为什么以下代码在 Swift 中不起作用 if someObject nil 您必须使用 运算符进行测试 例如 if someObject nil 我认为 更像是确保实例完全相同 基本上是比较指针 而 更像是 isEqual 检查 因此我认
  • Android:使用FLAG_SECURE方法后无法截图

    出于安全原因 我想在应用程序进入后台时隐藏应用程序的内容 了解使用下面的方法可以完成这项工作 但我希望屏幕截图功能仍然有效 getWindow addFlags WindowManager LayoutParams FLAG SECURE
  • 稀疏哈希映射对于特定数据非常慢

    tl dr 为什么关键查找sparse hash map对于特定数据 速度变慢约 50 倍 我正在测试速度关键查找 for sparse hash map来自 Google 的稀疏哈希库 使用我编写的非常简单的 Cython 包装器 哈希表
  • 尝试使用 Django 发送电子邮件时出现“[Errno 101] 网络无法访问”

    由于某种原因 我在尝试使用 Django 发送电子邮件 使用 gmail 时收到此错误 Errno 101 Network is unreachable 奇怪的是 它似乎只发生在我的网络应用程序在我的服务器 bluehost 上运行时 在本
  • 如何使用自定义行为设置折叠工具栏的背景以适合整个屏幕

    我正在关注一个很好的存储库 它展示了如何使折叠工具栏的自定义行为WhatsApp 个人资料折叠工具栏 https github com anton46 WhatsApp ProfileCollapsingToolbar 我不喜欢的是 当工具
  • HTML 选取框在 iOS 5.1 中不工作

    请看下面的函数 void loadHTMLinWebView objWebView UIWebView alloc initWithFrame CGRectMake 0 0 self frame size width self frame
  • 淘汰赛换行值绑定

    我在用Mathias Bynen 的占位符代码 https github com mathiasbynens jquery placeholder我想将它与淘汰赛一起使用 如果我做一个简单的自定义绑定 如下所示 ko bindingHand
  • Win RT XAML 中的布尔到可见性转换器第一次无法工作

    今天在 Windows RT Windows 商店应用程序 的 XAML 中工作时很奇怪 当IsValid true从我的视图模型设置我的布尔到可见性转换器第一次不起作用 我的路径保持隐藏 但随后确实显示正确的可见性 这是一个错误 还是可能
  • Android Scrollview 具有 videoview 会出现问题

    我有一个位于滚动视图内的视频视图 当我滚动滚动视图时 视频视图不会随之滚动 就好像它的位置是固定的一样 这是我的布局
  • 如何从 C# 中的 URL 下载文件?

    从 URL 路径下载文件的简单方法是什么 using var client new WebClient client DownloadFile http example com file song a mpeg a mpeg
  • 量角器需要密码才能登录 => 不安全?

    我开始使用 Protractor 进行 e2e 测试 要测试某些页面 我首先需要登录 现在我有这部分用于输入密码 var passInput element by id Passwd passInput sendKeys test 现在 当
  • 如何获取 eq() 值?

    这可能吗 为了让我得到eq 价值 例如 如果我单击li eq 2 var x会变成2 这是代码 numbers ul li click function x this eq val alert x The index what is thi
  • 从 Uri 转换位图返回 null [重复]

    这个问题在这里已经有答案了 在我的 Android 应用程序中 我使用 Google 驱动器来选择图像和文件 对于文件 我的代码在大多数情况下都运行良好 不幸的是 在某些情况下图像导入不起作用 图像位图返回空值 下面是我用来将内容 URI
  • 我们如何处理 BDD 场景的微小排列?

    我喜欢 BDD 开发方法 但我遇到了一个问题 即该方法能走多远 这条来自 ThoughtWorks 的最新评论Radar http thoughtworks fileburst com assets thoughtworks tech ra