1

我知道其中任何一个都可以,但我正在努力成为 ruby​​/cucumber 社区的更好成员。我有一个故事可以测试我网站的多个部分下是否没有任何链接,它不应该显示。那么这两种方式中哪一种是编写场景的最佳方式。再一次,我知道两者都可以,但我正在寻找最佳实践解决方案。我通常会使用选项 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

或者

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
4

3 回答 3

1

我相信最佳实践是将功能分解为各个部分(在这种情况下,场景)

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

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

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

于 2013-03-07T19:35:25.337 回答
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
于 2013-03-09T17:38:33.163 回答
0

我会用更易读的东西代替 ABC 或 D,只是认为你奶奶需要理解这个定义,她不会理解 ABCD 的意思。所以让我们这样说

给定一个基本用户.. .. 然后用户看不到编辑工具

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

只需尝试将这些 ABCD 加入有意义的事物中,例如组名、级别 n、团队等

那么您将对每个项目之一使用 TestUnits:如果您愿意的话,请使用 ABCD

于 2013-03-07T20:20:56.853 回答