试图完善我的黄瓜场景

时间:2013-03-07 19:28:55

标签: ruby cucumber scenarios

我知道其中任何一个都可行,但我正努力成为红宝石/黄瓜社区的更好成员。我有一个故事,测试我的网站的多个部分下面没有任何链接,它不应该显示。那么这两种方式中的哪一种是编写方案的最佳方式。再一次,我知道要么会工作,但我正在寻找最佳实践解决方案。我通常会使用选项B,因为他们都在测试不同的“然后”步骤;然而,我已经进行了一些研究,我是第二次猜测自己,因为我可以使用相同的给定语句测试所有场景,我正在读你应该只做一个新的场景,如果你改变“给定”和“然后”的步骤

一个。

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

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

3 个答案:

答案 0 :(得分:1)

我认为最佳做法是将功能分解为各个部分(在本例中为方案)

选项B更好,因为它遵循单一责任原则(当然可以应用于许多不同的代码部分)。 B的编写方式清晰直接。如果你在6个月内回到这里,或者新开发者第一次看到这个,你们都很清楚测试的目标。

选项A似乎做了很多,虽然这是一个集成测试,但您应该尽可能保持测试代码的特定部分是独立的。问问自己,当这个测试失败时,你会知道为什么吗?或者你是否必须开始挖掘以确定测试的哪个部分实际上失败了?

在这种情况下,最佳做法是提倡较小的代码段。如果这些测试开始重复(干,不要重复),你可以开始重构它们(或许Background

答案 1 :(得分:1)

粒度场景更可取,因为它们可以更明确地传达所需的行为,并在存在回归时提供更好的诊断。随着应用程序的发展,小方案更易于维护。漫长的场景会产生“引力”并且变得更长。在很长的情况下,很难弄清楚步骤的所有设置和副作用。结果是“引力吸引力”,长期情景持续增长。

方案大纲可以使您的测试既细致又简洁。在下面的示例中,一目了然,资源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

答案 2 :(得分:0)

我会替换A B C或D以获得更具可读性的东西,只要认为你的奶奶需要理解这个定义,她就不会理解A B C D的含义。所以我们这样说吧

给予基本用户 .. .. 然后用户无法看到编辑工具

给予超级用户 .. .. 然后超级用户应该看到编辑工具

尝试加入那些有意义的团体名称,等级n,团队等的A B C D

然后您将使用TestUnits作为每个项目之一:A B C D如果您