我有一个Spring Boot测试
@ExtendWith(SpringExtension.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = {PDFService.class},
properties = {
"spring.cloud.config.enabled=false",
"spring.cloud.discovery.enabled=false",
})
@EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class})
class PDFServiceTest {
一开始我就遇到了这个异常
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'org.springframework.amqp.rabbit.core.RabbitTemplate' available:
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
我如何在测试中禁用RabbitMQ?或者嘲笑它。
1条答案
按热度按时间myzjeezk1#
看起来RabbitMQ被禁用了,这实际上是你得到异常的原因。你的代码包含一个bean,它在测试设置中被加载(并自动连接),看起来像这样:
当spring test创建这个bean的示例时,它应该能够注入一些看起来像rabbit模板的东西,但是因为你已经禁用了它--没有bean要注入,所以出现了这个错误。
怎么解决呢?嗯,有很多不同的方法:
1.在测试中使用@MockBean
现在,rabbit模板的模拟将被注入到所有需要它的bean中。
1.重构代码,使使用RabbitTemplate的类不会被加载。通常,如果你不想测试该类的功能,这样做效果很好。
1.不要禁用Rabbit MQ,而是尝试使用测试容器并在测试之前启动Rabbit mq,创建一个infra来定义运行代码所需的一切,并注入一个真实的的Rabbit模板,该模板可以与Rabbit的测试容器一起工作。