【问题标题】:Writing SpecFlow scenario that includes a prompt for a user decision编写包含用户决策提示的 SpecFlow 场景
【发布时间】:2011-05-09 16:01:45
【问题描述】:

我是 SpecFlow 和 BDD 的新手,在编写需要用户做出选择的场景时遇到了障碍。基本上这里是这样的场景:

Scenario:  Deleting a record
Given I am on the edit record page
And I click the delete button
Then I should see a prompt asking for confirmation

我不知道如何超越这一点。这里有两种测试路径,一种用于用户对确认说“OK”时,一种用于用户说“Cancel”时。

我想说“如果我点击确定”,然后是“那么记录应该被删除”等等。但似乎应该以更好的方式分解它。

你会如何改写这个场景?

【问题讨论】:

    标签: bdd specflow


    【解决方案1】:

    我建议您在更高的层次上编写您的场景。在你的场景中避免使用按钮、点击和文本框,并尝试谈论用户想要完成的事情——你的系统行为。与页面的实际交互然后隐藏在步骤定义中。

    所以在你的情况下会是这样的;

    鉴于我在记录页面上

    当我删除一条记录时

    然后我应该会看到一条确认消息

    在 [When("I delete a record")] 的步骤定义中,您然后实现单击删除按钮和“确定”按钮或删除记录所需的任何按钮。

    我希望这很清楚。写在我的手机上;)

    【讨论】:

    • 谢谢 - 这是有道理的。我想我的下一行将类似于“并且应该出现一条消息,表明我的记录已被删除”。换句话说,给我一些地方来测试该记录实际上已被删除。这听起来正确还是我想多了?
    • Ken,你可以用“那么我应该看到一条确认消息”来覆盖它。如果它很重要,你可以改写它。为 Marcus +1 调出步骤级别。使用按钮和点击操作将是维护的噩梦!
    • @Lunivore - 当我开始从事 TDD 工作时,您谈到了我发现的挑战之一,即在哪里划清界限。我确实认为处理 UI(按钮、点击和文本框,哦,天哪!)是一件令人讨厌的事情。但是在网络上,如果您使用 HTML 元素 ID 和类,它是可以管理的。使用自动化框架(我使用 Selenium 2 / WebDriver)我可以轻松地对元素进行操作,例如单击它、添加文本、检查内容等。我想这一切都归结为个人喜好。在编写规范时,我倾向于保持高层次的方法。
    【解决方案2】:

    这里实际上可能存在三种情况。正如 Marcus 建议的那样,第一个重点是:

    Given I am on the record page
    When I delete a record
    Then I should see a confirmation message
    

    但是确认对话框的行为也有场景吗?

    Given I am presented with a confirmation message
    When I confirm the action
    Then the action proceeds
    

    和

    Given I am presented with a confirmation message
    When I cancel the action
    Then the action does not proceed
    

    【讨论】:

    • 你是对的,可能有三种情况。然而,BDD 并不是真正的测试。它是关于描述和探索系统的行为,以便每个人都能达成共识,并且任何人都可以安全地进行更改。如果您允许不同的类承担确认的责任,那么您可以将这样的低级行为委托给您的单元测试(模拟它),并让您的场景专注于更高级别的、具有业务价值的功能。
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多