java - 使用模拟测试时无法注入(inject)application.properties中定义的@value

标签 java spring-boot mockito

当我进行mockito测试时,如何注入(inject)application.properties中定义的值。

服务.java

@Override
public String getUseLanguage() {
    return applicationProperties.getLanguage();
}

ApplicationProperties.java

public class ApplicationProperties {

    @Value("${language}")
    private String Language;

    public String getLanguage() {
        return Language;
    }

应用程序属性

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没有注入(inject)ApplicationProperties,applicationProperties.getLanguage()Service.getUseLanguage()都是null。

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

最佳答案

您在测试中模拟了 applicationProperties 字段,并且没有提供任何行为。在返回 null 时调用的方法是有意义的。
此外,如果您希望按应有的方式注入(inject)属性,为什么要模拟呢?

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

关于java - 使用模拟测试时无法注入(inject)application.properties中定义的@value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54150998/

相关文章:

java - JHipster 格式的 Gradle 依赖项 "groupId:artifact"

java - 在 Java 中匹配简单正则表达式的问题

java - where查询区分大小写

java - org.springframework.expression.spel.SpelEvaluationException : EL1008E: Property or field 'latestTotalCases' cannot be found on object

java - Spring 数据库初始化仅在应用程序重启后才有效

java - java中链表的boolean add(E element)方法返回false时

java - Spring JMS : Set ErrorHandler for @JmsListener annotated method

mocking - 如何在 Mockito 中 stub Long.valueOf(String) ?

callback - 在 kotlin 中,如何模拟包装回调的挂起函数?

java - Mockito - 验证方法是否重启次数?