如何解决Spring Boot和Kafka升级破坏了我的测试
我已经更新了一个项目的库,尤其是将Spring Boot从2.2.6版本更新到了2.3.2。
如the migration documentation中所述,这也意味着我的Kafka依赖项发生了变化,一直到Spring Kafka和Kafka 2.5
但是,由于此更改,我的某些测试“随机地”失败,例如,当我执行所有测试时,我在其中的某些测试中遇到了这种失败(但并非总是在同一测试中):
java.lang.IllegalStateException: More than one record for topic found
来自此特定行:
KafkaTestUtils.getSingleRecord(consumer,topicConfiguration.getTopic(event))
文档中没有提及发生这种情况的原因,也没有其他日志错误消息说明发生这种情况的原因。因为我没有更改应用程序的逻辑,所以迁移过程中我缺少什么了吗?
如果我尝试这样的事情:
KafkaTestUtils.getRecords(consumer)
.records(topicConfiguration.getTopic(event)).map { it }[0]
要仅获取第一个,由于索引,先前可用的测试将失败,并显示IndexOutOfBoundsException
。
解决方法
根据Spring Kafka库的test documentation,从版本2.5开始,他们更改了配置使用者的方式。这是确切的报价:
从版本2.5开始,
consumerProps
方法将ConsumerConfig.AUTO_OFFSET_RESET_CONFIG
设置为earliest
。这是因为,在大多数情况下,您希望使用者使用测试用例中发送的所有消息。ConsumerConfig
的默认值为latest
,这意味着在使用者使用之前,测试已经发送的消息将不会接收这些记录。若要还原为以前的行为,请在调用方法后将属性设置为latest
。
很有可能是所描述的测试错误的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。