首页 > 解决方案 > 从 SpringBootTest 中排除配置类

问题描述

我有一个类可以在 src/main/java 下配置 Kafka:

@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,如何从我的测试中排除这个配置类?

标签: springspring-boot-test

解决方案


您可以在测试类中声明一个 SenderConfig 属性,注释为@MockBean(如果您在测试中不需要它,则不执行任何操作),这将有效地覆盖测试的 ApplicationContext 中的真实属性并阻止真实的实例化由 BeanFactory 提供。

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


推荐阅读