从单元测试中为@Value字段提供上下文

时间:2016-02-05 16:28:03

标签: java spring

我有一个这样的课程:

@Service("someClient")
public class SomeClient {

  @Value{some.value}
  private String someValue;

  public void someMethod() {
    return someValue;
  }

}

这样的测试:

@ContextConfiguration(locations = "classpath:/some/where/testApplicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeClientTest extends TestCase {

  @Value{some.value}
  private String someValueTest;

  @Test
  public void shouldWork() {
    ...
    someClient.someMethod()
    ...        
  }

}

当更广泛的应用程序运行时,SomeClient类中的字段someValue将从testApplicationContext.xml引用的属性文件中填充。当我在调试模式下运行测试时,我可以看到测试中填充了someValueTest,但是当测试调用被测试的类时,不会填充该值。

我可以使用一些建议!显然我可以改变类中字段的可见性,或者提供一个setter,但是如果可能的话我想避免这种情况。如果不是,请告知。

1 个答案:

答案 0 :(得分:1)

要在测试中使用@Value注释填充字段,您需要配置PropertySourcesPlaceholderConfigurer

在测试中添加以下内容:

    @Configuration
    public static class Config {
    @Bean
        public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    }

要从test属性文件中读取值,可以添加 @TestPropertySource(locations="classpath:test.properties")到您的Test类声明