在Junit单元测试中通过@PropertySource来获取Bean中的@Value属性值

使用场景说明

  • 在平时开发的时候,为了测试Spring中的一个Bean,通常要通过@ContextConfiguration注解来加载一些XML配置,问题是XML配置越来越多,现在要减少甚至去除XML配置,从而简化开发

  • 古老的项目由于历史问题没有使用Junit来测试Bean导致现在切换过来复杂

  • 有时候只想在Junit中测试几个Bean

  • 避免加载XML配置,直接从properties文件中获取@Value属性值

使用说明

  • 使用@Configuration注解将XML配置转换成在Bean中完成,@PropertySource注解用于指定properties文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /**
    * 通过该类可以代替在xml中如下的配置
    *
    *
    *
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="locations">
    <list>
    <value>classpath:jdbc.properties</value>
    </list>
    </property>
    </bean>
    * @author chen_k
    *
    */
    @Configuration
    @PropertySource(value = { "classpath:jdbc.properties" })
    public class SpringPropertiesConfigure {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
    }
    }
  • 使用@ContextConfigurationclasses属性来加载相关的几个Bean。DBService类中几个字段通过@Value从properties文件获取值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @ContextConfiguration(classes = {DBService.class, SpringPropertiesConfigure.class})
    public class TestDBService extends BaseTest {

    @Autowired
    private DBService dBService;

    @Test
    public void testGetDBInfo() {
    String dbInfo = dBService.toString();
    Assert.assertNotNull(dbInfo);
    System.out.println(dbInfo);
    }
    }

完整的代码

参考

Buy me a cup of coffee