Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 试图完善我的黄瓜场景_Ruby_Cucumber_Scenarios - Fatal编程技术网

Ruby 试图完善我的黄瓜场景

Ruby 试图完善我的黄瓜场景,ruby,cucumber,scenarios,Ruby,Cucumber,Scenarios,我知道这两种方法都能奏效,但我正在努力成为ruby/cucumber社区中更好的一员。我有一个故事,测试如果我的网站的多个部分下没有任何链接,它应该不会显示。那么这两种方式中哪一种是编写场景的最佳方式呢。再一次,我明白这两种方法都有效,但我正在寻找最佳实践解决方案。我通常会使用选项B,因为它们都在测试不同的“然后”步骤;然而,我已经做了一些研究,我在猜测自己,因为我可以用相同的给定语句测试所有场景,并且我读到,如果您同时更改“给定”和“然后”步骤,您应该只创建一个新场景 A 或 B 我认为最佳实

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

A

B


我认为最佳实践是将特性分解为不同的部分(在本例中为场景)

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

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


在这种情况下,最佳实践提倡更小的代码部分。如果这些测试开始重复(干巴巴的,不要重复你自己),你可以开始重构它们(可能有
背景)

我会用一个B C或D来代替一些更可读的东西,只是想你奶奶需要理解这个定义,她不会理解B C D的意思。让我们这样说吧

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

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

试着加入那些有意义的东西,比如组名、级别n、团队等等


然后,您将为每一项中的一项使用TestUnits:A B C D,如果您愿意的话,

粒度场景更可取,因为它们更明确地传达了所需的行为,并且在出现回归时提供了更好的诊断。随着应用程序的发展,小型场景更容易维护。长时间的场景会产生“引力”,并持续更长的时间。在一个很长的场景中,很难找出这些步骤的所有设置和副作用。其结果是一种“万有引力”,在这种引力下,长期的情景会不断增加

一个场景大纲可以让你的测试既精细又简洁。在下面的示例中,很明显,资源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
场景大纲:用户无法访问未经授权的资源
假设我是一个没有访问权限的用户
当我导航到报告时
那么我看不到这一部分
示例:
|资源|
|B|
|C|
|D|
场景:无法访问
鉴于我是一名用户,无法访问
当我导航到报告时
然后我看到一个标题
我看到一条错误消息,说明用户没有访问权限
但我不能点击A的标题

我不喜欢使用背景,因为这样的话,场景所做的细节并没有全部记录在场景块中。虽然它减少了功能中的代码量,并且最终会重复您自己,但当场景失败时,您拥有场景中的所有信息来重新创建失败。否则,你将不得不在钩子之前挖掘背景信息,或者更糟。我只使用背景和干燥作为下一步,如果你开始重复自己。dry的目的不是减少代码,而是统一代码,使其目的更加明确。每个测试都应该清楚它的意图。重复但未突出显示的内容不应分散或吸引我们对测试中心功能/代码的注意力。我显然使用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

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
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