gpt4 book ai didi

bdd - 在编写 BDD 功能时,我应该将之前的用户交互放入 Given 步骤还是 When 步骤?

转载 作者:行者123 更新时间:2023-12-04 17:38:52 27 4
gpt4 key购买 nike

我正在尝试为多步骤业务流程编写需求(通过向导)。我有很多场景,用户与一个屏幕的交互会改变您是否可以在另一个屏幕上选择选项。

例如(我已经模糊了实际业务,但步骤的过程和形式几乎相同):

Feature: Personal Diagnostic Search Filter
In order to select a Technician who offers Personal Diagnostics,
when I've asked for a Personal Diagnostic
As a Business Customer
I want to limit my search to Technicians who offer Personal Diagnostics

Background:
Given a Business named "Big Al's Auto Supply"
And a Customer named "Bob Test" at the "Big Al's Auto Supply" Business
And an Account named "bobtest@testbusiness.com" owned by "Bob Test"
And the "bobtest@testbusiness.com" Account has the "Repair Order Creator"
permission
And you log in as "bobtest@testbusiness.com"
And you start scheduling a new Repair Order

Scenario: Enter the Select Technician page when Use PD is selected
Given you select Use PD
When you enter the Select Technician page
Then the PD Filter should be visible
And the PD Filter should be selected

Scenario: Basic Search for Technicians when PD Filter is selected
Given a Technician named "PD Technician"
And the Technician named "PD Technician" supports PD
And a Technician named "Non-PD Technician"
And the Technician named "Non-PD Technician" does not support PD
And you select Use PD
And you enter the Select Technician page
And you select the PD Filter
And you select Basic Search
When you search for Technicians with the name "Technician"
Then your search results should contain "PD Technician"
And your search results should not contain "Non-PD Technician"

但是在 the Gherkin wiki ,建议您:

Avoid talking about user interaction in givens



不过,他们继续破例:

Log in a user (An exception to the no-interaction recommendation. Things that “happened earlier” are ok).



那个页面上还说:

The purpose of When steps is to describe the key action the user performs



如果你有很多 UI 交互,什么属于 Given,什么属于 When?

在我的第一个场景中, select Use PD需要 UI 交互,因为它是创建新维修订单向导的一部分。然而,它是 PD 过滤器可见的先决条件,并在用户进入选择技术员页面时触发。

第一种情况可能不会那么糟糕,但第二种情况会加剧问题。当您点击“搜索”时会触发搜索,但必须进行大量 UI 交互才能导航到该页面。其中一些交互也不能被掩盖,如 Use PD必须选择搜索过滤器才能出现。但那些 UI 交互不是 关键 Action 的场景。

最佳答案

作为一般规则,尽可能多地描述场景,就好像您正在谈论它一样,并尽可能多地排除不相关的信息。

例如,我希望您在上面的场景中阅读以下内容:

Given our customer Bob Test is scheduling a repair order
And we have two technicians: "Fred Technician" and "George Nontechnician"
When Bob Test decides he wants a Personal Diagnostic
And he selects a technician
Then the search results should only contain "Fred Technician"

然后做任何必要的事情来使这些步骤工作 - 无论是登录还是其他方式。请注意,我没有谈到“页面”,也没有采取实际步骤——它们对用户来说应该是直观的。 BDD 与测试无关。这是关于提出人们将如何使用系统的示例,以便您可以围绕这些示例进行对话并探索它们,找到异常(exception)和不同的场景等。

检查过滤器是否可见没有值(value)。用户并不关心过滤器是否可见。他关心他可以使用过滤器来获得他的结果,所以就这样做吧。

在代码中,我通常在我的步骤之间传递一个“世界”对象。这可以让很多gubbins摆脱困境。我没有经常使用小 cucumber ,但我想它提供了类似的能力。您可以将所有用户详细信息存储在那里,您创建了哪些技术人员,以便您可以检查它不会在结果中带回“George Nontechnician”等。

使用友好的角色名称也很有用,因为人们可以想象 Fred 和 George 的样子。

摆脱任何不会对场景产生影响并且不会帮助人们想象它发生的东西。您知道 Bob 有权安排订单,因为这就是他正在做的事情 - 只需在该步骤中添加必要的内容即可。

“何时”是您有兴趣描述的行为。在这种情况下,您对过滤个人诊断的能力感兴趣,因此所有与行为相关的用户交互都应该在“何时”中,所有以前的交互都应该在“给定”中。我发现尝试思考结果不同的环境很有用 - 例如,如果没有可用的 PD 技术人员会怎样?这告诉我有什么区别;我们将设置不同的上下文但执行相同的事件。上下文在 Given 中,事件在 When 中。 (在引入“背景”之前,这曾经要简单得多)。

一般来说,如果您在看场景时眼睛呆滞,那您就做错了。

希望这可以帮助。

关于bdd - 在编写 BDD 功能时,我应该将之前的用户交互放入 Given 步骤还是 When 步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com