我已经使用小黄瓜(和黄瓜)很多年了。我很早就注意到 Cucumber.io 主页示例在给定和何时语句中引用了“I”,但在 then 语句中没有引用。
我一直认为这是因为给定的和何时的陈述是用户的主观行为,而当时的陈述应该是关于被测应用程序状态的客观度量。
但是,我注意到在 Cucumber 官方书中,他们的示例在整个步骤中(包括使用 then 语句时)都引用了“I”。
有人知道哪种方法是正确的吗?
对于“Then”语句是否应包含“I”,没有明确的规则。正如 @ekostadinov 所说,这取决于参与测试场景的 Actor。
例如在消息传递场景中:
Given Alice is on a messaging page
When Alice posts a message to Bob
Then Bob should receive the message
在这种情况下,在“Then”中使用“I”是没有意义的。但是,如果您的情况略有不同:
Given I am on the messaging page
When I post a message to Bob
Then I should receive confirmation that Bob received the message
那么使用“我”确实有意义。
因此,这取决于您如何编写测试。总而言之,我更喜欢在整个测试中使用角色(即系统中特定类型的用户),例如Alice、Bob 等。这通常可以消除使用“I”可能产生的歧义。
根据我关于 BDD 和 Gherkinri 的经验,我们始终认为用户故事有两个参与者:用户和系统。并非所有参与者都是最终用户。例如,角色可能是另一个系统或想要某些功能以购买您的产品但永远不会实际使用该产品的人。创建聚合角色(例如消费者)和专门角色(例如浏览器或常客)可能很有用。因此,从最终用户的角度来看,在 Then 步骤中包含 I 实际上是预期的结果。示例:
Then I should see that cash amount 'storedTotalAmount' and cash amount 'currentAmount' are equal 'true'