进行模拟测试时,如何注入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()均为null。

谁能告诉我如何处理这个问题

最佳答案

您在测试中模拟applicationProperties字段,但不提供任何行为。这就意味着在返回null时调用的方法。
此外,如果要按预期方式注入属性,为什么还要嘲笑?

要测试application.properties值,请用@SpringBootTest注释您的类,该类将加载Spring上下文,并以此方式加载环境属性。

09-12 10:39