背景,最近搭了一个springboot的框架,其中使用到@ConfigurationProperties注解,通过properties配置文件来绑定属性,
配置类的代码如下
@Component
@ConfigurationProperties(locations={"classpath:my.properties"})
public class MyConfig implements Serializable{
    /**
 * 
 */
private static final long serialVersionUID = 1L;

private String address;
private String ip;
////省略
my.properties内容
address=http://aaaaaaaaaaaaaaaaa
ip=111111使用springboot的启动类启动后,使用controller测试一下没有问题,能取到相应属性
控制器代码如下 @Autowired
public MyConfig myConfig;

@RequestMapping(value = "/user")
@ResponseBody
public String use()
// return user.getName();
return "&&&&&&&&"+myConfig.getAddress();
}然后我使用spring junit测试,测试方法是
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationConext.xml"})
public class Mytest {@Autowired
public MyConfig myConfig;

@Test
public void test() {
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@"+myConfig.getAddress()+"*****"+myConfig.getIp()); }
问题出来了 ,junit测试却获取不到对应的属性,这是什么情况?难道junit需要特别的配置?请高手解答一下,希望是经过实测可用的答案,

解决方案 »

  1.   

    测试代码要先加载SpringBoot运行环境
      

  2.   

    加载运行环境是指什么?是加载配置文件application.xml吗?已经加载过了,测试其他功能时,其他的bean加载都没有问题,而且这个配置bean应该是加载成功了的,因为给这个bean的其中一个属性用@value注解注入值都能够取到,就是无法匹配配置文件的值,怀疑是匹配properties文件时的问题
      

  3.   

    用到了spring的注解,想要将配置文件注入到对象中,就必须要spring来处理,因此在进行junit测试时也需要启动spring,lz可以在测试类上加注解,如下所示:
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
    public class TestClass{...}然后再运行测试用例,应该可以通过,反正我这样做是没问题的。