我有一个这样的课程:
@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,但是如果可能的话我想避免这种情况。如果不是,请告知。
答案 0 :(得分:1)
要在测试中使用@Value注释填充字段,您需要配置PropertySourcesPlaceholderConfigurer
。
在测试中添加以下内容:
@Configuration
public static class Config {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
要从test属性文件中读取值,可以添加
@TestPropertySource(locations="classpath:test.properties")
到您的Test类声明