6

我对集成测试有点陌生。我有两个使用 Kafka 将消息相互传递的服务。但是,对于我的集成测试,我不一定想让 Kafka 运行以运行我的测试。有没有标准的方法来模拟卡夫卡?或者这是我需要自己创建的东西,一些 MockKafka 队列和应用程序中适当的补丁?此外,这是否违反了集成测试应该做的事情?我对此的看法是我没有测试 Kafka 的任何功能,并且为了集成测试应该被模拟出来。

4

1 回答 1

0

模拟 Kafka 本身是不可行的,因为它的协议不是通用的 RFC 支持的标准(与 HTTP 不同)并且只有一种实现。

在单元测试级别,您可以抽象和模拟需要 Kafka 的功能,但这不是您的情况。您需要集成测试,因此,很可能您必须使用实际的 Kafka 才能测试实际的交互。

为了以最小的努力参与真正的 Kafka,我会使用特殊的自包含 Docker 映像(例如:https ://github.com/up9inc/async-ms-demo/tree/main/kafka )。构建它并在暴露 9092 端口的情况下运行它。

对于与 Kafka 的集成测试,我的原则是不模拟 Kafka 本身,并使用我称之为“模拟演员”的东西模拟“不受欢迎/不相关”的服务。

“Mock Actors”方法在这里详细描述:https ://up9.com/mock-actor-approach-for-kafka (我写的文章)。也有一个实现这些功能的工具(http://mockintosh.io)。

于 2021-06-21T14:54:58.947 回答