在 BDD 中隔离行为
Isolating Behaviour In BDDs
假设我有一个连续做三件事的程序:
Task 1
Task 2
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 失败的各种方式可以(并且可能 应该 被)捕获为它们自己的场景、单元测试或集成测试。
假设我有一个连续做三件事的程序:
Task 1
Task 2
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 失败的各种方式可以(并且可能 应该 被)捕获为它们自己的场景、单元测试或集成测试。