gpt4 book ai didi

unit-testing - 测试 BDD 中的副作用

转载 作者:行者123 更新时间:2023-11-28 21:03:28 24 4
gpt4 key购买 nike

我有一个具有以下逻辑的 API:

  1. 从 Kafka 消费。
  2. 处理记录。
  3. 如果处理成功,更新数据库。
  4. 如果处理失败,则将其推送到 Kafka 主题。
  5. 如果推送到 Kafka 主题失败,则提交。
  6. 如果记录处理成功,则提交。
  7. 如果提交失败,则记录并继续使用下一个事件。

我正在为此 API 编写 BDD。目前,我觉得我正在测试太多场景:

  1. ProcessingFailed -> 数据库未更改 -> 应该将事件推送到 Kafka -> 应该提交。
  2. Kafka 推送失败 -> 应该提交。
  3. Commit failed -> (what to do?是否应该检查log是否打印正确?)
  4. Happy path -> 数据库已更新 -> Kafka 主题不包含事件 -> 提交成功。

我的问题是,测试此类副作用的正确方法是什么?

现在假设我的流程步骤由三个步骤组成:

  1. 从数据库中获取。
  2. 进行 HTTP 调用。

现在假设我正在通过关闭我的数据库来模拟“处理失败”。现在我是否还需要测试未进行 HTTP 调用?

最佳答案

bdd 测试的一个很好的通用规则是每个测试应该只有一个失败原因。对于 cucumber ,这转化为每个场景中只有一个 Then 步骤。

以此为指导,我建议为流程的每个步骤编写一个场景。

# Consume from Kafka
Given a certain thing has happened
# Process the record
When some action is performed successfully
# Update database if processed successfully
Then some result exists in the database

然后你的下一个场景从第一个场景停止的地方开始:

Given a certain thing happened
When the action is performed unsuccessfully
# Push failed message to Kafka queue
Then a failed message is sent

第三个场景接续第二个场景:

Given a certain thing happened
And the action was performed unsuccessfully
When a failure message is sent
Then a thing should not exist in the database

每个场景都建立在之前场景中验证的步骤之上,注意确保场景不共享数据,或者依赖于之前执行场景的成功。

关于unit-testing - 测试 BDD 中的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com