“给定”描述了场景发生的上下文。它要么描述一个状态,要么描述已经发生的事情。所以用现在进行时或过去时来表达它。
Given the invoice is two weeks late <-- continuous present
Given the invoice was submitted <-- past
您还会注意到,它没有说明是谁提交了发票。这对于上下文来说很好,因为它如何到达那里并不重要。我们称之为“被动”而不是“主动”的声音。
“何时”描述发生的事件。我喜欢用现在时态、主动语态来表达。 “狗咬了男孩”是主动语态。 “那个男孩被咬了”是被动的,因为它没有提到是谁干的。通过提及是谁做的,我们提醒人们有一个用户参与其中,即使该用户是另一个系统。
When I check my accounts
When the admin creates a new record
When the ETL begins
“那么”描述了在那种情况下,对于那个事件应该发生什么。我喜欢用“应该”这个词,它是一个条件时态。它也是被动语态,因为“何时”应该涵盖它是如何发生的。
Then the invoice should be marked as paid
Then I should receive an email <-- "I" am not the doer so this is still passive voice
“应该”这个词还有一个额外的好处。早在开发 Waterfall 的日子里,我们曾经试图正确地满足所有需求,但我们从来没有完全做到。
通过使用“应该”这个词,我们概括了不确定性仍然存在的想法。它鼓励人们质疑需求是否准确,以及面对不断变化的技术和创新,它们是否仍然准确。当一个想法不使用“必须”或“将”时更容易改变它,因为这些词表达了确定性,如果你确信别人对某事是确定的,你就不太可能推回.
通过回击和提出其他建议,我们得到“通过示例进行探索”,它是规范或示例测试的前身,它们是很好的副产品。理想情况下,您将讨论比实际保留更多的场景,并决定哪些场景在范围内和范围外。 “应该”这个词确实有帮助,当你捕捉这些场景并将它们写下来时保留它也有帮助。
当然,它有助于区分“Given”和“Then”(但希望不是“When”,因为无论如何都会用主动语态表达)。
所以,如果我要使用你的“做某事”的例子,我可能会说:
Given something was done
When someone does something
Then something else should have happened.
现在,您的场景步骤中没有一个是相似的,而且您也已经阐明了它们的真正含义。
我不久前写过a blog post,如果它作为参考有帮助的话。