【问题标题】:Trying to perfect my cucumber scenarios试图完善我的黄瓜场景
【发布时间】:2013-03-07 19:28:54
【问题描述】:

我知道其中任何一个都可以,但我正在努力成为 ruby​​/cucumber 社区中更好的成员。我有一个故事可以测试我网站的多个部分下是否没有任何链接,它不应该显示。那么这两种方式中哪一种是编写场景的最佳方式。再一次,我知道两者都可以,但我正在寻找 Best Practice 解决方案。我通常会使用选项 B,因为它们都在测试不同的“然后”步骤;但是我已经进行了一些研究,并且我在猜测自己,因为我可以使用相同的给定语句测试所有场景,并且我正在阅读您应该只在更改“给定”和“那么”步骤时才创建一个新场景.

A.

Scenario: A user that cannot access A, B, C, or D
    Given I am a, user without access to A, B, C, or D
    When I navigate to reports
    Then I see the A header
    But I cannot click on A's header
    And I see error message under A stating the user does not have access
    And I do not see the B section
    And I do not see the C section
    And I do not see the D section

B.

Scenario: A user that cannot access A
    Given I am a, user without access to A
    When I navigate to reports
    Then I see the A header
    And I see error message under A stating the user does not have access
    But I cannot click on A's header

Scenario: A user that cannot access B
    Given I am a, user without access to B
    When I navigate to reports
    Then I do not see the B section

Scenario: A user that cannot access C
    Given I am a, user without access to C
    When I navigate to reports
    Then I do not see the C section

Scenario: A user that cannot access D
    Given I am a, user without access to D
    When I navigate to reports
    Then I do not see the D section

【问题讨论】:

    标签: ruby cucumber scenarios


    【解决方案1】:

    我认为最佳实践是将功能分解为各个部分(在本例中为场景)

    选项 B 更好,因为它遵循单一职责原则(当然可以应用于代码的许多不同部分)。 B的写法清晰直接。如果您在 6 个月后返回此内容,或者新开发人员第一次看到此内容,那么你们俩都对测试的目标有了很好的了解。

    选项 A 似乎做了很多工作,虽然这是一个集成测试,但您应该尽可能保持被测试代码的特定部分独立。问问自己,当这个测试失败时,你会知道具体原因吗?还是您必须开始四处挖掘,看看测试的哪一部分实际上失败了?

    在这种情况下,最佳实践提倡使用更小的代码段。如果这些测试开始重复自己(DRY,不要重复自己),您可以开始重构它们(可能使用Background

    【讨论】:

    • 我不喜欢使用背景,因为场景正在做什么的细节并没有全部记录在场景块中。尽管它减少了功能中的代码量,并且您最终会重复自己,但当场景失败时,您拥有场景中的所有信息来重新创建失败。否则你将不得不去挖掘背景信息或更糟,在钩子之前。
    • 如果一个人开始重复自己,我只使用背景和干燥作为可能的下一步。干点不是减少代码,而是统一代码,使其目的更明确。每个测试都应该清楚它的意图。重复但未突出显示的内容不应分散或吸引我们测试中心的功能/代码的注意力。
    【解决方案2】:

    细化场景更可取,因为它们更明确地传达所需的行为,并在出现回归时提供更好的诊断。随着应用程序的发展,小场景更易于维护。长场景会产生“引力”并变得更长。从长远来看,很难弄清楚这些步骤的所有设置和副作用。结果是一个“万有引力”,长期情景不断增长。

    场景大纲可以使您的测试既细化又简洁。在下面的示例中,一目了然,资源 B、C 和 D 都具有相同的策略,而资源 A 不同:

    Scenario Outline: A user cannot access an unauthorized resource
        Given I am a user without access to <resource>
        When I navigate to reports
        Then I do not see the <resource> section
    
        Examples:
            | resource |
            | B        |
            | C        |
            | D        |
    
    
    Scenario: A user that cannot access A
        Given I am a, user without access to A
        When I navigate to reports
        Then I see the A header
        And I see error message under A stating the user does not have access
        But I cannot click on A's header
    

    【讨论】:

      【解决方案3】:

      我会用更易读的东西替换 A B C 或 D,只是认为你的祖母需要理解这个定义,她不会理解 A B C D 的意思。所以让我们这样说

      给定一个基本用户 .. .. 那么用户就看不到编辑工具了

      给定一个超级用户 .. .. 那么超级用户应该会看到编辑工具

      试着把那些 A B C D 加入到有意义的事情中,比如组名、n 级、团队等

      那么您将对每个项目之一使用 TestUnits:A B C D 如果您愿意

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 2021-10-15
      • 2019-12-15
      • 1970-01-01
      相关资源
      最近更新 更多