Как исправить ошибку теста на org.springframework.beans.factory.UnsatisfiedDependencyException Ошибка создания компонента с именем - PullRequest
0 голосов
/ 25 сентября 2018

У меня правильно работает загрузочное приложение 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;

1 Ответ

0 голосов
/ 25 сентября 2018

Попробуйте импортировать класс конфигурации, который определяет bean-компоненты поверх вашего тестового класса.

@RunWith(SpringRunner.class)
@WebMvcTest(IntentModelingController.class)
@TestPropertySource("classpath:application-test.yml")
@Import(YourConfig.class)

Другая возможная проблема может заключаться в том, что обнаруживается @Bean, но метод graphiteRegistry вызывает исключение,Это может произойти, например, из-за отсутствующих свойств (я вижу, вы определили application-test.yml, содержит ли он все необходимые свойства для создания экземпляра вашего компонента?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...