Springboot中Junit测试类读取application.yml或者application.properties配置文件中变量为null问题

学习使用springboot过程中发现写在application.yml中的变量在测试类中读取的时候总是出现null,网上找了一堆解决方案都不能解决问题。
配置文件application-default.yml内容如下

http:
 host: www.baidu.com
 port: 8888

环境条件:idea社区版
springboot:2.6.7
maven:3.8.1
JDK:1.8
现记录解决方案如下:
1.pom.xml确保引入必要的依赖


   org.projectlombok
   lombok
   true


   org.springframework.boot
   spring-boot-starter-test
   test



   org.springframework.boot
   spring-boot-configuration-processor
   true


   junit
   junit
   test

2.config类确认加了必要的注解

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "http")
@Getter
@Setter
@ToString
public class HTTPConfig {

    private String host;
    private String port;

}

3.测试类加上必要的注解

// 根据自己的来
import com.xxx.datatest.config.HTTPConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes={DatatestApplication.class})
@ActiveProfiles("uat")
public class YmlTests {
    @Autowired
    private HTTPConfig httpConfig;

    @Test
    public void contextLoads() {
        System.out.println(httpConfig);
    }
}

然后尝试运行,完美解决问题


image.png

问题的关键是@ActiveProfiles这个注解,这个注解是在Spring单元测试加载ApplicationContext时指定profiles
@ActiveProfiles有以下参数:
profiles: 指定配置文件
resolver: 指定ActiveProfilesResolver,通过代码指定配置文件
value: profiles的别名
inheritProfiles: 配置文件是否继承父类,默认为true

你可能感兴趣的:(Springboot中Junit测试类读取application.yml或者application.properties配置文件中变量为null问题)