Spring Boot:@TestConfiguration在集成测试期间不覆盖Bean

问题描述 投票:22回答:2

我在用@Configuration装饰的类中定义了Bean:>

@Configuration
public class MyBeanConfig {

    @Bean
    public String configPath() {
        return "../production/environment/path";
    }
}

我有一个用@TestConfiguration装饰的类,应该重写此Bean

@TestConfiguration
public class MyTestConfiguration {

    @Bean
    @Primary
    public String configPath() {
        return "/test/environment/path";
    }
}

configPath bean用于将外部文件的路径设置为包含在启动期间必须读取的注册码。它用于@Component类:

@Component
public class MyParsingComponent {

    private String CONFIG_PATH;

    @Autowired
    public void setCONFIG_PATH(String configPath) {
        this.CONFIG_PATH = configPath;
    }
}

[尝试调试时,我在每个方法以及测试配置类的构造函数中都设置了一个断点。 @TestConfiguration的构造函数断点被命中,所以我知道我的测试配置类实例化,但是该类的configPath()方法从不被命中。而是单击常规@Configuration类的configPath()方法,并且@Autowired中的String MyParsingComponent始终为../production/environment/path,而不是预期的/test/environment/path

不知道为什么会这样。任何想法将不胜感激。

我有一个用@Configuration装饰的类中定义的Bean:@Configuration公共类MyBeanConfig {@Bean public String configPath(){return“ ../production/environment/path”; ...

java spring-boot spring-test
2个回答
41
投票

如Spring Boot参考手册的Detecting Test Configuration部分所记录,在顶级类中配置有@TestConfiguration注释的所有Bean将not


4
投票

请确保@Bean工厂方法的方法名称与任何现有的Bean名称都不匹配。我在方法名称上遇到问题,例如config()

© www.soinside.com 2019 - 2024. All rights reserved.