2013-03-07 158 views
1

我知道这些都可以,但我想成为红宝石/黄瓜社区的更好成员。我有一个故事,测试我的网站的多个部分没有任何链接,它不应该显示。那么这两种方式中的哪一种是编写场景的最佳方式。再次,我明白要么会工作,但我正在寻找最佳实践解决方案。我通常会使用选项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 

OR

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 

回答

1

我认为最好的做法是功能分解成其各个部分(在这种情况下,场景)

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

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

在此背景下,最佳实践主张较小的代码段。如果这些测试开始重复自己(干,不要重复自己),你可以开始重构它们(或许Background

+0

我不喜欢使用背景,因为接下来的具体内容是什么场景正在做的事情并不是全部记录在场景块内。尽管它减少了该功能中的代码量,并且最终会重复自己,但是当场景失败时,您将拥有场景中的所有信息来重新创建失败。否则,你将不得不去挖掘背景信息或更糟,在挂钩之前。 – 2013-03-07 20:01:28

+0

如果开始重复自己,我只使用背景和干燥作为可能的下一步。干燥的目的不是要减少代码,而是要统一代码并使其目的更加清晰。每个测试都应该清楚它的意图。重复但不突出显示的内容不应该分散注意力,也不应将注意力集中在我们测试中心的特征/代码上。 – AdamT 2013-03-07 20:16:46

0

我会代替ABC或D的更可读的东西,只是认为你的祖母需要明白这个定义,她不明白ABCD的意思。让我们把它给一个基本的用户 .. .. 那么用户无法看到的编辑工具,这样

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

只是尝试加入那些ABCD在一些有意义的事情这样的组名,n级,团队等

则可以使用TestUnits每个项目之一:ABCD,如果你将

+0

我很明显使用ABCD作为实际物品的占位符,但是这是针对一家公司的,我不确定他们会如何在我发布 – 2013-03-07 20:24:46

+0

之前将其网站的具体细节放在论坛上。他们在一个单一的名字。或使用表格 http://www.ruby-doc.org/gems/docs/d/davidtrogers-cucumber-0.6.2/Cucumber/Ast/Table.html – 2013-03-07 20:27:46

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