[英]Spring Boot/JUnit - No qualifying bean of type 'boolean' available
我已经使用Spring几个月了,但是仍然不了解该框架带来的一些细微差别。
我正在尝试为一个类执行单元测试,并且遇到了常见错误消息和异常:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 1 of constructor in <package>.MessagingManager required a bean of type 'boolean' that could not be found.
Action:
Consider defining a bean of type 'boolean' in your configuration.
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'boolean' available: expected at least 1 bean which qualifies as autowire candidate.
单元测试类( messagingManager
是SUT):
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {MessagingManager.class})
public class TestMessagingManager {
@Autowired
private MessagingManager messagingManager;
...
配置类:
@Configuration
@EnableScheduling
@EnableAsync
@ComponentScan({"<package 1>"})
public class ServiceConfigurer {
...
@Value("${service.name}")
private String serviceName;
...
@Bean(name = "messagingManager")
public MessagingManager messagingManager() {
return new MessagingManager(serviceConfig(), "MISSION_PLANNER".equals(serviceName));
}
...
@Bean
public ServiceConfig serviceConfig() {
return config.getServiceByName(serviceName);
}
...
}
SUT类:
public class MessagingManager {
...
public MessagingManager(ServiceConfig serviceCfg, boolean transactional) {
...
}
...
}
我尝试使用org.springframework.test.util.ReflectionTestUtils.setField()
设置ServiceConfigurer
类中的serviceName
字段,但这没有帮助。 我怀疑它不起作用,因为涉及DI时出现了问题,并且反射实用程序的使用为时已晚。 只是一个猜测。
我究竟做错了什么?
如果要接受“创建boolean类型的bean”的想法,如何定义一个仅包含布尔值的bean,该boolean值是基于另一条已配置信息的值设置的? 有其他选择吗?
同
@SpringBootTest(classes = { MessagingManager.class })
Spring尝试将MessagingManager
类型的bean添加到您的上下文中。 它通过调用唯一可用的构造函数来实现。 Spring现在想注入类型为ServiceConfig
和boolean
bean作为构造函数参数。 但这失败了,因为在测试上下文中没有boolean
类型的bean。
一种解决方案是将该行更改为
@SpringBootTest(classes = { ServiceConfigurer.class })
因为ServiceConfigurer
知道如何构造MessagingManager
类型的bean。
要将属性注入测试中,您可以添加
@TestPropertySource(properties = { "service.name=example" })
参加您的测试班。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.