У меня правильно работает загрузочное приложение Spring.в классе загрузочного приложения Spring у меня есть эти 2 bean-компонента:
@Bean
public StatsdMeterRegistry graphiteRegistry(StatsdConfig statsdConfig) {
statsdMeterRegistry = StatsdMeterRegistry
.builder(statsdConfig)
.nameMapper(new GraphiteHierarchicalNameMapper(HOST_TAG))
.build();
return statsdMeterRegistry;
}
@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
InetAddress localHost;
try {
localHost = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
log.error("Failed to get the host name");
return null;
}
return registry -> registry.config()
.commonTags(HOST_TAG, localHost.getHostName() + "_" + SERVICE_NAME);
}
Эти bean-компоненты работают нормально во время выполнения, но не работают во время тестирования с:
Причина: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем 'graphiteRegistry' во время теста.
Мой тестовый clss выглядит примерно так:
@RunWith(SpringRunner.class)
@WebMvcTest(IntentModelingController.class)
@TestPropertySource("classpath:application-test.yml")
public class IntentModelingControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private IntentModelingService intentModelingService;
@Autowired
private WebApplicationContext webApplicationContext;
private Gson gson = new Gson();
Любые советы о том, как сделать эти бины видимыми во время теставремя?
Редактировать: если я комментирую первый компонент и оставляю второй компонент как есть - тест проходит хорошо.
Редактирование # 2: Разница между первым компонентом, вызывающим проблему, и вторым компонентом, что хорошо, заключается в том, что для первого компонента требуется параметр: параметр 0 метода graphiteRegistry в yyy.xxx.intentmodeling.server.Для IntentModelingApplication требуется bean-компонент типа 'io.micrometer.statsd.StatsdConfig', который не может быть найден.
РЕШЕНО путем добавления в тест 2 полей:
@MockBean
private StatsdMeterRegistry statsdMeterRegistry;
@MockBean
StatsdConfig statsdConfig;