进行模拟测试时,如何注入application.properties中定义的值。
Service.java
@Override
public String getUseLanguage() {
return applicationProperties.getLanguage();
}
ApplicationProperties.java
public class ApplicationProperties {
@Value("${language}")
private String Language;
public String getLanguage() {
return Language;
}
application.properties
Language = EN;
我的测试用例:
@RunWith(MockitoJUnitRunner.class)
public class TimChannelServiceTest {
@Mock
private ApplicationProperties applicationProperties;
@InjectMocks
private Service Service;
@Test
public void getUseLanguage(){
assertEquals(applicationProperties.getLanguage(),Service.getUseLanguage());
}
}
@Value 似乎没有注入ApplicationProperties, applicationProperties.getLanguage()和 Service.getUseLanguage()均为空。
谁能告诉我如何处理这个问题
答案 0 :(得分:1)
如果您要谈论spring @Value,则必须使用带有@RunWith(SpringJUnit4ClassRunner.class)批注以及将注入应用程序属性类的上下文文件来运行测试用例。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:test-context.xml")
public class MyTest {
}
但是,在这种情况下,您在嘲笑,因此您不能指望它提供spring实用程序。
答案 1 :(得分:1)
您在测试中嘲笑了applicationProperties
字段,但没有提供任何行为。这就意味着在返回null
上调用的方法。
此外,如果要按预期方式注入属性,为什么还要嘲笑?
要测试application.properties
的值,请用@SpringBootTest
注释类,这将加载Spring上下文,并以此方式加载环境属性。
答案 2 :(得分:1)
您需要加载spring上下文,@value
才能正常工作。用@SpringBootTest
注释您的班级。另外,不要嘲笑您的ApplicationProperties
自动装配。并且在测试属性文件中定义了language
属性。