Исключение класса конфигурации из SpringBootTest - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть класс для настройки Kafka в src / main / java:

@Configuration
public class SenderConfig {

    @Value("${spring.kafka.producer.bootstrap-servers}")
    private String bootstrapServers;


    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Bean
    public ProducerFactory<String,Item> producerFactory(){
        log.info("Generating configuration to Kafka key and value");
        Map<String,Object> config = new HashMap<>();
        config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
        config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
        return new DefaultKafkaProducerFactory(config);
    }

У меня есть класс в src / test / java для тестирования репозитория, и я хочу исключить это класс конфигурации:

@SpringBootTest(properties = { "spring.cloud.config.enabled=false",
        "spring.autoconfigure.exclude=com.xyz.xyz.config.SenderConfig" })
@Sql({ "/import_cpo_workflow.sql" })
public class WorkflowServiceTest {

    @Autowired
    private WorkflowRep workflowRep;

    @Test
    public void testLoadDataForTestClass() {
        assertEquals(1, workflowRep.findAll().size());
    }
}

Ошибка: вызвана: java .lang.IllegalStateException: Следующие классы не могут быть исключены, поскольку они не являются классами автоконфигурации: com.xyz.xyz. config.SenderConfig

Как я могу исключить этот класс конфигурации из своего теста, так как в данный момент я не тестирую Kafka?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Вы можете объявить свойство SenderConfig в тестовом классе, аннотированное как @MockBean (и ничего не делать с ним, если оно вам не нужно в тесте), и оно будет эффективно переопределять реальное свойство в ApplicationContext теста и останавливаться. Реальный экземпляр от BeanFactory.

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/MockBean.html

0 голосов
/ 13 апреля 2020

Попробуйте использовать @ComponentScan для исключения классов.

Пример:

@ComponentScan(basePackages = {"package1","package2"},
  excludeFilters = {@ComponentScan.Filter(
    type = FilterType.ASSIGNABLE_TYPE,
    value = {SenderConfig.class})
  })
...