我对集成测试有些新意。我有两个使用Kafka将消息传递给另一个的服务。但是,对于我的集成测试,我不一定希望运行Kafka以运行我的测试。有没有一种标准的模拟卡夫卡的方法?或者这是我需要创建自己的东西,一些MockKafka队列和补丁适当的应用程序?另外这是违反集成测试应该做的吗?我对此的看法是,我没有测试Kafka的任何功能,为了集成测试,应该嘲笑它。
答案 0 :(得分:0)
模拟 Kafka 本身是不可行的,因为它的协议不是通用的 RFC 支持的标准(与 HTTP 不同)并且只有一种实现。
在单元测试级别,您可以抽象和模拟需要 Kafka 的功能,但这不是您的情况。您需要集成测试,因此,很可能您必须让实际的 Kafka 进行实际交互测试。
为了以最小的努力涉及真正的 Kafka,我将使用特殊的自包含 Docker 映像(例如:https://github.com/up9inc/async-ms-demo/tree/main/kafka)。构建它并在暴露 9092 端口的情况下运行它。
对于与 Kafka 的集成测试,我的原则是不模拟 Kafka 本身,而是使用我所谓的“Mock Actor”模拟“不需要/不相关”的服务。
“Mock Actors”方法在这里有详细描述:https://up9.com/mock-actor-approach-for-kafka(我写的文章)。还有一个工具可以实现这些功能 (http://mockintosh.io)。