我看过多个 Cucumber 风格指南,建议在每个场景中使用 “仅一个时间”。但是如果测试需要一系列按时间顺序的步骤怎么办?
这是一个现实世界的例子:许多空调在压缩机重新通电之前实施“延迟中断”,即在压缩机上次停止后五分钟内禁止重新启动压缩机。
你会如何用 Cucumber 表达这一点?这是我的第一次拍摄:
Given that the compressor relay is energized
When I turn off the air conditioner
Then the compressor relay should be de-energized
Then I make a note of the time
When I turn on the air conditioner
And I wait for three minutes
Then the compressor relay should be de-energized # delay-on-break is in effect
When I wait for two minutes
Then the compressor relay should be energized # delay-on-break time completes
用什么更好的黄瓜风格来写这个?
所有指南都是建议,没有一个是经验法则。
当然,您不应该编写数十行来解释 SUT 中发生的每个技术细节,因为它根本不会为场景增加任何价值。
BDD 的主要目标不是具有几个给定、一个何时和一个然后关键字的小场景,而是改善利益相关者/同事之间的沟通和协作,促进对 SUT 所需行为的共同理解。
它应该像技术(开发/质量保证)和非技术(ba/经理/请求者/等)团队成员之间的通用语言。
如果没有人(除了我们自己)阅读这些场景,我们为什么要担心任何风格指南? :)
BDD 的详细解释可以在 ISTQB ATT 教学大纲中找到(第 2.1.2 节此处)。
最后,很多人在 Gherkin 中编写 E2E 测试,并且仅用 1 个“when/then”对来完成它确实很困难。
对于所描述的场景,如果团队成员可以阅读并理解 SUT 的预期行为 - 那么就完全没问题了。
我会通过删除那些对理解行为没有真正帮助的部分来最小化它,并将第一人称改为第三人称(以使场景去个性化):
Given the air conditioner is running
When the user turns off the air conditioner
Then the compressor relay should be de-energized
When the user turns on the air conditioner with a 3-minute delay
Then the compressor relay should be de-energized
When the user waits for 2 minutes
Then the compressor relay should be energized