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
相关产品推荐
相关产品推荐

