假设我有一个程序连续执行三项操作:
Task 1
Task 2
Task 3
现在假设我想为任务2写BDDs
。让我们说说它失败了。现在,仅在Task 2
成功后才执行Task 1
。但是任务1本身可以通过许多方式成功(例如,如果下游系统以固定次数响应错误,我们的程序将重试Task 1
)。我的问题是,为Task 1
编写测试时,我应该考虑Task 2
的所有行为吗?
Given_Task2Fails_Task1IsRetried_Expect_SomeBehaviour
Given_Task2Fails_Task1IsNotRetried_Expect_SomeBehaviour
如果是这种情况,那么我需要创建每个任务的所有排列和组合,并使任务2保持不变。这会炸毁具有大量重复代码的方案。这就是我的意思:
Given_Task2Fails_Task1IsRetried_Task3IsNotRetried_Expect_SomeBehaviour
Given_Task2Fails_Task1IsNotRetried_Task3IsNotRetried_Expect_SomeBehaviour
Given_Task2Fails_Task1IsRetried_Task3IsRetried_Expect_SomeBehaviour
Given_Task2Fails_Task1IsNotRetried_Task3IsRetried_Expect_SomeBehaviour
在这种情况下,如何编写可靠的方案?理想情况下,我希望更改系统中的每个参数,并保持Task 2
不变。但这就像蛮力一样,我很确定那里有更好的方法。
[为任务2编写测试时,您应该假设任务1已成功完成。在验证任务2的行为的测试中,不需要捕获任务1并恢复的各种方式。
Given Task 1 succeeded
When Task 2 is performed
Then Outcome 2 should have happened
当任务1失败时会发生什么,甚至不必担心断言任务1成功的测试。实际上,任务1失败的各种方式都可以(并且可能