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

很有可能是所描述的测试错误的原因。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...