小编典典

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

spring-boot

Bean在用@Configuration装饰的类中有一个定义:

@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豆用于将路径设置为包含必须在启动期间读取的注册代码的外部文件。它在@Component类中使用:

@Component
public class MyParsingComponent {

    private String CONFIG_PATH;

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

在尝试调试时,我在每个方法以及测试配置类的构造函数中设置了一个断点。在@TestConfiguration类的构造函数断点命中,所以我知道我的测试配置类实例化,但是configPath()该类的方法不会被击中。相反,将configPath()命中普通@Configuration类的方法,并且@Autowired
Stringin
MyParsingComponent始终../production/environment/path是预期值,而不是期望值/test/environment/path

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


阅读 2471

收藏
2020-05-30

共1个答案

小编典典

如Spring Boot参考手册的“ 检测测试配置”部分中所述,@TestConfiguration
不会 通过组件扫描来拾取在带有注释的顶级类中配置的任何bean 。因此,您必须显式注册您的@TestConfiguration课程。

您可以通过@Import(MyTestConfiguration.class)@ContextConfiguration(classes = MyTestConfiguration.class)在您的测试班级上做到这一点。

在另一方面,如果你有注解的类@TestConfiguration是一个static嵌套类 的测试类,它会自动注册。

2020-05-30