如果构建电子邮件通知方案,在特定状态更改后的1个工作日内必须发送通知,您会如何编写给定的?
这看起来不错吗?
Given that I'm the system
and the user of a particular type T
and the state is S
When it is 1 business day after the date state was changed to x
then send an email notification with xxx content.
我有一个疑问的原因是我的理解是,给出了我们的前提条件,在这种情况下是A.特定类型的用户,B。状态是S和C.它是在州的日期之后的1天改变。
如果所有这些先决条件都在给定部分中,那么什么时候会出现在什么时候?我的理解是'when'部分用于事件触发器。除了运行通知作业之外,没有其他操作。那么这是正确的吗?
Given the user of a particular type T
and the state is S
and it is 1 business day after the date state was changed to x
When the email notification process triggered
then send an email notification to all users of type T with xxx content.
我很感激你的想法
答案 0 :(得分:2)
你走在正确的轨道上!
正如你在When
之前所说的那样是一个触发器,所以让我们深入研究一下。
Gherkin用于行为驱动开发(BDD),因为您正在尝试模拟行为。
给定 - 输入 - 先决条件
这些是在动作或触发发生之前需要的东西。他们为将要发生的操作设置测试。
何时 - 触发 - 操作
这些是触发结果的用户行为。这是BDD中的B
然后 - 输出 - 结果
这是最终结果,用户在行为完成时应该期待什么。
你站在哪里
所以你处于一个有趣的境地,因为正如你所指出的那样,没有任何行为。所以这是一个棘手的部分,虽然具有Given-When-Then格式很好,但是在没有可靠的用户行为的情况下,它具有Given-Then或When-Then格式是完全有效的。那么在那种情况下:
Given it is 1 business day after the date state was changed to x
和
When it is 1 business day after the date state was changed to x
两者同样有效。
关于你的第二个代码块,你需要问自己的问题是the email notification process triggered
触发器或结果?我个人认为这是输入的结果。如果你认为你需要它,那么我认为你应该写这样的测试:
Given there is a user of type T
And the state is S
And it is 1 business day after the date state was changed to x
Then the email notification process should have triggered
And send an email notification to all users of type T with xxx content.
奖励 - 如何说明您的测试并避免使用实施语言
不是你问的,但实际上有一种方法可以改善你的测试措辞。您希望将测试与实际实现分离。这意味着避免发送,单击或类型等单词,并关注行为和结果。参加考试我会像这样重写:
Given there is a user of type T
And the state is S
And it is 1 business day after the date state was changed to x
Then all users of type T should be notified of xxx
我删除了电子邮件通知步骤,因为可以从最后一步推断出来。我还将最后一步与实现语言分离。这里重要的不是用户收到电子邮件,而是通知他们内容。您的Given
步骤也应根据您的业务逻辑进行更改,因为它们目前与您的实施非常相关。