在 BDD 中隔离行为

Isolating Behaviour In BDDs

假设我有一个连续做三件事的程序:

  1. Task 1
  2. Task 2
  3. Task 3

现在假设我想为任务 2 编写 BDDs。假设它失败了。现在 Task 2 只有在 Task 1 成功后才执行。但是任务 1 本身可以通过多种方式成功(例如,如果下游系统以错误响应固定次数,我们我的程序将重试 Task 1)。我的问题是,在为 Task 2 编写测试时,我应该考虑 Task 1 的所有行为?

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 已经成功。任务 1 失败和恢复的各种方式不是您需要在验证任务 2 行为的测试中捕获的内容。

Given Task 1 succeeded
When Task 2 is performed
Then Outcome 2 should have happened

当任务 1 失败时会发生什么,甚至与断言任务 1 成功的测试无关。事实上,任务 1 失败的各种方式可以(并且可能 应该 被)捕获为它们自己的场景、单元测试或集成测试。