为特定 Spring 启动测试禁用 Kafka 侦听器
Disabling Kafka Listeners for a particular Spring Boot test
如何在具有 Spring Boot (2.2+) 和 Spring Kafka (2.4+) 的应用程序中禁用 @SpringBootTest
测试中的 @KafkaListener
个实例?
目标是在特定测试中禁用 Kafka 侦听器,以便此类测试可以 运行 而无需启动嵌入式 Kafka 代理。
Spring Boot 允许通过创建自定义 TypeExcludeFilter
.
从扫描中排除 类
要禁用 Kafka 侦听器,请排除所有具有 @KafkaListener
或 @KafkaHandler
:
注释方法的 类
public class KafkaListenersTypeExcludeFilter extends TypeExcludeFilter {
private static final String KAFKA_LISTENER = "org.springframework.kafka.annotation.KafkaListener";
private static final String KAFKA_HANDLER = "org.springframework.kafka.annotation.KafkaHandler";
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
return annotationMetadata.hasAnnotatedMethods(KAFKA_LISTENER)
|| annotationMetadata.hasAnnotatedMethods(KAFKA_HANDLER);
}
@Override
public boolean equals(Object o) {
return o != null && getClass() == o.getClass();
}
@Override
public int hashCode() {
return 1;
}
}
用 @TypeExcludeFilters
注释 Spring 引导测试,并将 KafkaListenersTypeExcludeFilter
作为值:
@RunWith(SpringRunner.class)
@SpringBootTest
@TypeExcludeFilters(KafkaListenersTypeExcludeFilter.class)
public class SampleSpringBootTest {
//...
}
Spring 注释为 @TypeExcludeFilters(KafkaListenersTypeExcludeFilter.class)
的引导测试不会启动 Kafka 侦听器,因此不需要 Kafka 代理。
当只有少数Kafka listener bean时你也可以按照建议mock listener bean Deadpool in the
@RunWith(SpringRunner.class)
@SpringBootTest
@MockBean({
SampleKafkaListener.class
})
public class SampleSpringBootTest {
//...
}
如何在具有 Spring Boot (2.2+) 和 Spring Kafka (2.4+) 的应用程序中禁用 @SpringBootTest
测试中的 @KafkaListener
个实例?
目标是在特定测试中禁用 Kafka 侦听器,以便此类测试可以 运行 而无需启动嵌入式 Kafka 代理。
Spring Boot 允许通过创建自定义 TypeExcludeFilter
.
要禁用 Kafka 侦听器,请排除所有具有 @KafkaListener
或 @KafkaHandler
:
public class KafkaListenersTypeExcludeFilter extends TypeExcludeFilter {
private static final String KAFKA_LISTENER = "org.springframework.kafka.annotation.KafkaListener";
private static final String KAFKA_HANDLER = "org.springframework.kafka.annotation.KafkaHandler";
@Override
public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {
AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
return annotationMetadata.hasAnnotatedMethods(KAFKA_LISTENER)
|| annotationMetadata.hasAnnotatedMethods(KAFKA_HANDLER);
}
@Override
public boolean equals(Object o) {
return o != null && getClass() == o.getClass();
}
@Override
public int hashCode() {
return 1;
}
}
用 @TypeExcludeFilters
注释 Spring 引导测试,并将 KafkaListenersTypeExcludeFilter
作为值:
@RunWith(SpringRunner.class)
@SpringBootTest
@TypeExcludeFilters(KafkaListenersTypeExcludeFilter.class)
public class SampleSpringBootTest {
//...
}
Spring 注释为 @TypeExcludeFilters(KafkaListenersTypeExcludeFilter.class)
的引导测试不会启动 Kafka 侦听器,因此不需要 Kafka 代理。
当只有少数Kafka listener bean时你也可以按照建议mock listener bean Deadpool in the
@RunWith(SpringRunner.class)
@SpringBootTest
@MockBean({
SampleKafkaListener.class
})
public class SampleSpringBootTest {
//...
}