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