美文网首页
Springboot中Junit测试类读取application

Springboot中Junit测试类读取application

作者: sunland_0416 | 来源:发表于2022-04-26 10:46 被阅读0次

    学习使用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确保引入必要的依赖

    <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
    </dependency>
    <!-- 自定义配置需要的依赖 -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-configuration-processor</artifactId>
       <optional>true</optional>
    </dependency>
    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
    </dependency>
    

    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

          本文链接:https://www.haomeiwen.com/subject/ojucyrtx.html