我对集成测试还比较新。我有两个服务,它们使用Kafka互相发送消息。然而,在我的集成测试中,我不一定需要运行Kafka才能运行测试。是否有一种标准的方法来模拟Kafka?或者这是我需要自己创建的东西,即MockKafka队列,并在应用程序适当地打补丁?此外,这是否违反了集成测试应该做的事情?我的看法是,我没有测试Kafka的任何功能,因此为了集成测试的目的,应该进行模拟处理。
我对集成测试还比较新。我有两个服务,它们使用Kafka互相发送消息。然而,在我的集成测试中,我不一定需要运行Kafka才能运行测试。是否有一种标准的方法来模拟Kafka?或者这是我需要自己创建的东西,即MockKafka队列,并在应用程序适当地打补丁?此外,这是否违反了集成测试应该做的事情?我的看法是,我没有测试Kafka的任何功能,因此为了集成测试的目的,应该进行模拟处理。
模拟Kafka本身是不可行的,因为它的协议不是通用的RFC支持标准(不像HTTP),并且只有一个实现。
在单元测试级别上,您可以抽象和模拟需要Kafka的函数,但这不是您的情况。您想进行集成测试,因此最有可能需要涉及实际的Kafka以进行实际交互测试。
为了以最小的努力涉及真正的Kafka,我会使用特殊的自包含Docker镜像(例如:https://github.com/up9inc/async-ms-demo/tree/main/kafka)。构建它并将其与9092端口一起运行。
对于与Kafka的集成测试,我的原则是不模拟Kafka本身,并使用我称之为“模拟演员”的方式模拟“不需要/无关”的服务。
“模拟演员”方法在这里详细描述:https://up9.com/mock-actor-approach-for-kafka(由我撰写的文章)。也有一个实现这些功能的工具(http://mockintosh.io)。