Я использую 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()
для установки поля serviceName
в классе ServiceConfigurer
, но это не помогло.Я подозреваю, что это не работает, потому что проблема возникает, когда задействован DI и что использование утилиты отражения «слишком поздно».Просто предположение.
Что я делаю не так?
Если бы меня развлекала идея "создания бина типа boolean", как мне определить бин, который просто содержит логическое значение?значение, которое установлено на основе значения другого настроенного фрагмента информации?Есть ли альтернативы?