2016-02-05 39 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

相關問題