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

Quarkus单元测试执行时如何读取application-test.properties中的自定义配置属性

Quarkus测试读取配置属性问题解答

可行性结论

你提到的通过@ConfigProperty注解读取application-test.properties中discord.token配置的方式完全可行,但需要满足以下几个前置条件:

  • 测试类必须添加@QuarkusTest注解,启动Quarkus CDI上下文后才会处理配置属性的注入逻辑
  • application-test.properties必须存放在src/test/resources目录下,Quarkus执行测试时会自动加载该配置文件的属性,优先级高于src/main/resources下的同名配置文件
  • 注入token属性的类必须是Quarkus托管的Bean(包括添加了@QuarkusTest的测试类本身、业务服务类等),手动实例化的类无法触发依赖注入

正确注入示例代码

import io.quarkus.test.junit.QuarkusTest;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertNotNull;

@QuarkusTest
public class DiscordServiceTest {

    @ConfigProperty(name = "discord.token")
    private String token;

    @Test
    public void testTokenLoadedSuccessfully() {
        // 此时token已被注入为配置文件中的XYZ
        assertNotNull(token);
    }
}

执行./mvnw clean test命令时,Quarkus默认激活test profile,上述配置会自动生效。

特殊场景替代方案

如果你不需要启动完整Quarkus上下文做轻量单元测试,或者注入属性的类不是托管Bean,可以采用主动读取配置的方式,无需依赖CDI注入:

import org.eclipse.microprofile.config.ConfigProvider;

public class DiscordClient {
    public String getToken() {
        return ConfigProvider.getConfig().getValue("discord.token", String.class);
    }
}

如果你的测试不需要真实调用外部Discord接口,也可以直接通过Mockito等测试框架Mock该token的值,无需依赖配置文件读取。

排查提示:如果运行测试时出现配置找不到的异常,可以先执行ConfigProvider.getConfig().getPropertyNames().forEach(System.out::println);打印所有已加载的配置属性名,排查配置文件是否被正确加载,或者是否有其他配置源覆盖了该属性值。

内容的提问来源于stack exchange,提问作者Rodrigo Prestes Machado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:03