You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus单元测试无法读取application.properties配置问题

问题描述

我已在application-test.properties中配置:

%test.feature.retry.enabled=true

在application.properties中配置:

%dev.feature.retry.enabled=true

Java配置接口代码如下:

@ConfigMapping(prefix = "feature")
public interface FeatureConfig {

    @WithName("retry.enabled")
    boolean isRetryEnabled();
}

业务服务类GenerationService中注入并使用该配置:

@ApplicationScoped
public class GenerationService {

    @Inject
    private FeatureConfig featureConfig; // 注:原代码中写的SoaFeatureConfig应为笔误,需与配置接口类名保持一致

    public Response mainMethod() {
        if (featureConfig.isRetryEnabled()) {
            // 业务逻辑
        }
    }
}

但在测试类中使用@Mock调用FeatureConfig时,返回值始终为false,请问我遗漏了什么?


问题分析与解决

核心原因

@Mock生成的Mock对象,所有方法默认返回对应类型的初始值——布尔类型的初始值就是false,它不会自动读取你配置文件里的内容。

两种解决方式

  1. 手动指定Mock方法的返回值
    在测试类中,用Mockito的API显式设置isRetryEnabled()的返回结果:

    @InjectMocks
    private GenerationService generationService;
    
    @Mock
    private FeatureConfig featureConfig;
    
    @BeforeEach
    void setUp() {
        MockitoAnnotations.openMocks(this);
        // 强制让Mock方法返回true
        when(featureConfig.isRetryEnabled()).thenReturn(true);
    }
    
  2. 放弃Mock,加载真实测试配置
    如果想让测试真实读取application-test.properties的配置,不要给FeatureConfig加@Mock注解,直接让测试容器注入真实的配置实例:

    • 若用Quarkus:测试类加@QuarkusTest注解,容器会自动加载测试环境配置
    • 若用Spring Boot:测试类加@SpringBootTest注解,默认会读取application-test.properties

额外修正点

原代码中GenerationService注入的SoaFeatureConfig和配置接口FeatureConfig名称不一致,这是笔误,必须修正为相同类型,否则会出现注入失败问题。

内容的提问来源于stack exchange,提问作者Eve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:28:14