在使用SpringBoot 测试模块时,如果我们的程序中有关于 rabbitmq, kafka等的监听时,测试模块会直接将这些监听部分给启动起来。
有时候我们在测试的时候,并不像执行这些方法。以下就是关于这个的一个解决办法。
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
/**
* 用于测试时,停止监听
* 暂时为停止kafka监听。
* <p>
* Create by JIUN·LIU
* Create time 2020/5/28
**/
public class ListenerExcludeFilter 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;
}
}
然后再测试类上添加注解即可。
eg:
@RunWith(SpringRunner.class)
@SpringBootTest
@TypeExcludeFilters(ListenerExcludeFilter.class)
public class Neo4jInsertServiceTest {
public void test () throws Exception{
}
}
此时,既可以启动spring容器,又不执行上面我们以及设置的kafka的监听操作,对于 rabbitmq,同理处理即可。