如何使用 BDD 构建 CRUD 测试

2024-04-14

我陷入了一个进退两难的境地,试图找出答案best构建我的 CRUD 测试的方式。在我的应用程序中,用户可以创建多种类型的“任务”。我当前的实现如下所示:

Scenario:  Create Task-Type A
Given I am on a user's profile page
And Have access to create tasks
When I create a new task with a unique title and description
Then The confirmation prompt should display

Scenario:  Read the Task-Type A
Given A new task was created
When I search the text on the page for the unique title
Then I should find the task
And All the details of the task should match what was created

Scenario:  Update the Task-Type A
Given A task exists
And I have opened the edit dialog
When I make the following changes:
| title | description | date | save |
| ""    | ""          | ""   | yes  |
Then all the saved changes should match the task details

Scenario: Delete the Take-Type A
Given A task exist
When I select the option to delete
And I confirm deletion process
Then The Task should no longer exist in the list

我在这里寻求帮助的原因是因为我无法控制 CRUD 步骤的执行顺序。我使用 Specflow 和 NUnit,它们按字母顺序而不是它们在功能文件中出现的顺序执行场景。这会导致这个顺序 C > D > R > U,这当然会在运行时崩溃并烧毁。

我尝试在场景名称的开头添加字符,结果是“场景:第 1 阶段创建...”、“场景:第 2 阶段读取...”等。但当我做出这个改变时,我忍不住想这感觉是多么“黑客”。我已经做了一些研究,但在很大程度上没有找到更好的方法来控制执行顺序。

我确实有多个这样的 CRUD 测试要编写;每种类型的“任务”都有一个,我想知道是否最好尝试将整个 CRUD 堆栈压缩为一个场景,这样我就不必担心执行顺序,或者是否有更好的方法来控制执行?


依赖场景的执行顺序是一种反模式,应该避免。出于同样的原因,测试运行程序通常不提供任何机制来控制执行顺序。这也违背了可执行规范的概念:场景本身应该是可理解的(并且可执行的)。
Source: Specflow - “场景”之间的状态 https://stackoverflow.com/questions/7158810/specflow-state-between-scenarios

因此,我建议使用一种场景,或者,如果您想要单独的场景,只需使它们独立于执行顺序即可。
例如,对于删除场景,您应该在此场景中执行 CRU 前提条件,然后执行带有验证的删除步骤。
对于最佳实践(恕我直言) - 请参阅 Kent Beck 文章:https://www.facebook.com/notes/kent-beck/decompose-run-on-tests/555371804495688 https://www.facebook.com/notes/kent-beck/decompose-run-on-tests/555371804495688

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

如何使用 BDD 构建 CRUD 测试 的相关文章

  • 在 Jenkins 中运行 Selenium 测试

    我通过 Selenium IDE 记录了一些简单的 Selenium 测试 现在我想在 Jenkins 中运行这些测试 我需要 Jenkins 的哪个插件才能做到这一点 以及如何逐步运行测试 感谢帮助 您可以使用录制的 selenium I
  • 如何在 VS Code 中调试 nightwatch 测试

    我正在尝试使用 VS Code 调试 nightwatch e2e 测试 我使用打字稿编写测试 只有当我在 js 文件中放置断点时它才能工作 之后它会转到 ts 文件 我可以从那里调试它 如果我把它放在我的测试的 ts 文件中 它永远不会停
  • 关于私有方法单元测试的问题

    在 MSTest 中 Shadowing 属性可帮助您对另一个程序集中的私有方法进行单元测试 这是相关链接 VS 生成单元测试时使用的 Shadowing 属性是什么 https stackoverflow com questions 34
  • 抽象 CRUD 控制器是个好主意吗?

    我们正在使用 ASP NET MVC 开发一个相当大的应用程序 一开始我们发现拥有一个具有常见 CRUD 操作 新建 保存 删除 以及默认列表操作的抽象基本控制器可能很有用 在我们的例子中 我们有 20 多个实体通过这种控制器进行管理 这有
  • 如何在 grails 3 中运行单个集成测试?

    Grails 3 至少 3 1 10 在仅运行特定测试时不稳定 如何让它运行单个集成测试 这是运行单个集成测试的示例命令 grails test app LoginFunctional integration 如果将 integration
  • Cypress 获取 href 属性

    我有一个测试用例 其中有一个在新选项卡中打开的链接 由于 Cypress 不支持多个选项卡 我想获得href该链接的属性 然后在同一选项卡中打开它 我正在尝试这样做 但由于某种原因它不起作用 it Advertise link should
  • 安排行动断言替代方案

    一般问题是单元测试是否有 AAA 的替代模式 如果是的话 看到一些例子并了解它们的优点和缺点将会非常有趣 作为 AAA 测试的最简单示例 在 C 中 为了简单起见 使用 var Arranging var annualSalary 1200
  • 如何创建嵌套 GridView 来编辑 EF Code First 关系?

    我有一个经典的父子关系 我想使用它来进行 CRUDasp GridView控制 对父级进行 CRUD 很容易 但挑战在于嵌套一个asp GridView在一个asp GridView这能够对儿童关系产生作用 为了使问题变得更容易 我构建了一
  • 开始在现有代码库中进行自动化集成/单元测试

    背景 我们已经移交了一个非常大的代码库 140 万行 主要是 C 语言 该应用程序主要由 asp net 2 0 样式的 asmx Web 服务组成 用于访问 SQL Server 2008 数据库以及各种 XML 文件中的数据 没有现有的
  • Selenium 在并行运行测试时处理 ProtocolHandshake 错误

    我尝试练习使用 TestNG 并行执行测试invocationCount and threadPoolSize A 我写了一个这样的一体化测试 并且成功了 Test invocationCount 5 threadPoolSize 5 pu
  • Jenkins 未找到 SureFire 报告

    我已经在本地 jenkins 服务器中创建了一个 Maven 项目作业 项目 并添加了jenkin的TestNG插件来查看测试报告 但该作业没有显示我的 TestNg 结果 我看到以下错误 TestNG 报告处理 开始使用模式在工作区中查找
  • 用于屏幕文本的 OCR(光学字符识别)

    我正在尝试创建一个软件 通过捕获屏幕截图来自动化 PC 然后使用 OCR 光学字符识别 来查找要单击的特定按钮 例如 我已经有了鼠标和键盘控制部分 但现在 我需要 OCR 来处理屏幕截图 我发现 Tesseract OCR 似乎不能很好地处
  • 编码 UI - 断言的“失败时继续”

    我使用 SpecFlow 和 Coded UI 为 WPF 应用程序创建自动化测试 我在 Then 步骤中有多个断言 其中有几个失败了 当断言失败时 测试用例失败并停止执行 我希望我的测试用例继续执行直到最后一步 当执行最后一步时 如果在执
  • 为 iPhone 应用程序设置自动构建服务器的最佳实践?

    我正在为我们的 iPhone 应用程序设置一个自动夜间构建服务器 并寻求有关哪些有效 哪些无效的建议 基本上 至少每晚运行所有单元测试并向我们的内部网站发布新的临时版本 所有开发人员都使用笔记本电脑 笔记本电脑将在夜间关闭 因此我正在考虑购
  • 如何以编程方式使用 TestNG 运行 Selenium Java 测试?

    我使用 Selenium RC 和 Java 使用 TestNG 作为测试框架 我使用 Eclipse 作为 IDE 我想非常轻松地从我自己的程序中调用 TestNG 我怎样才能做到这一点 我的以下 Java 代码运行良好 Test pub
  • nUnit Assert.That委托并发问题

    我的代码中遇到了一些暂时的死锁 无法解决它 简单的代码 我无法创建一个简单的调用链来重现代码InvokeChangeEvent Test public async void Test sut InvokeChangeEvent foo fi
  • 由于 __init__ 构造函数而产生的 Pytest 集合警告

    我一直在使用 Pytest 和 Selenium Web 驱动程序自学测试自动化 我所有的测试函数都在一个名为测试网络 py 它位于名为的目录中tests 我将所有函数分开 并将它们放在一个名为的单独目录中的自己的文件中测试用例 例如 这就
  • gem 如何提供 Cucumber 功能和步骤定义?

    我有两个 Rails 项目 A 和 B 其中包含以下宝石 project A gem green theme path gt dev themes green theme gem devel tasks path gt dev themes
  • Mysqli 准备好的语句从数组动态构建 INSERT 查询

    我正在尝试用 PHP 而不是 OOP 开发我的函数 以创建 CRUD 目标是对任何表使用相同的函数 但我已经陷入了第一个表中 不知道该怎么做 我现在拥有的 function to avoid injections function vali
  • 以编程方式安装 Android apk 作为测试框架的一部分

    我正在尝试以编程方式安装 apk 但运气不佳 我正在设置一个针对物理设备的自动化测试框架 并且我希望测试设备在运行测试之前从构建服务器检索最新的 apk 虽然我知道没有通用的方法可以在未经用户同意的情况下实际安装 apk 但我很好奇在开发人

随机推荐