2016-02-05 75 views
0

我有这样一类:提供上下文@Value字段从一个单元测试

@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() 
    ...   
    } 

} 

当较宽的应用程序正在运行,场someValue中SomeClient类内部从testApplicationContext.xml引用的属性文件中填充。当我在调试模式下运行测试时,我可以看到someValueTest被填充到测试中,但是当测试调用被测试的类时,该值不会被填充。

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

回答

0

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

以下内容添加到您的测试:

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

来读取测试属性文件中的值,你可以添加 @TestPropertySource(locations="classpath:test.properties")到测试类声明

+0

感谢,会给一个去,让你知道它是怎么回事...... – daqpan

+0

所以我的问题是不是在测试中填充字段,而是在测试中调用时测试的类。所以要清楚,该属性正确地填充在测试中。它正确地填充应用程序正常运行的时间。但是,当从测试中调用该类时,它不会填充。 – daqpan

+0

如何在测试下实例化类? – jny

相关问题