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

如何在不使用@QuarkusTest的测试中使用@ConfigMapping?

问题描述

我有一个标注了@ConfigMapping(prefix = "myconfig")的MyConfig接口,用来从src/main/resources/application.properties读取配置。写单元测试的时候,因为配置项太多不想Mock这个接口,就照着SmallRye Config文档的写法获取实例:

final SmallRyeConfig sconfig = 
      ConfigProvider.getConfig().unwrap(SmallRyeConfig.class);
final MyConfig config = sconfig.getConfigMapping(MyConfig.class);

结果运行报错:

java.util.NoSuchElementException: SRCFG00027: Could not find a mapping for com.natixis.matrisk.api.management.releases.config.ReleaseConfig
at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:683)
at io.smallrye.config.SmallRyeConfig.getConfigMapping(SmallRyeConfig.java:673)
可能的原因及解决办法
  • SmallRye Config没扫到你的MyConfig接口:单元测试环境里,默认的ConfigProvider不一定会自动识别你的配置映射接口。别用ConfigProvider.getConfig(),手动构建SmallRyeConfig实例,主动指定要加载的映射和配置文件:
SmallRyeConfig config = new SmallRyeConfigBuilder()
    .withMapping(MyConfig.class)
    .withSources(PropertiesConfigSourceProvider.fromClasspath("application.properties", true))
    .build();
MyConfig myConfig = config.getConfigMapping(MyConfig.class);
  • 测试环境没加载到正确的配置文件:单元测试时,src/main/resources下的配置文件可能没被自动加载,或者被测试目录的配置覆盖了。先确认测试类路径里能找到application.properties,或者像上面那样手动指定加载这个文件。
  • MyConfig接口的写法不符合要求:检查下你的配置映射接口是不是符合规范:
    • 必须是public接口
    • 方法返回值只能是基本类型、String、其他配置映射接口,或者Optional/集合类
    • @ConfigMapping的prefix要和配置文件里的键前缀完全一致(默认大小写敏感,别写错)
  • 依赖有问题:确保测试依赖里的smallrye-config版本正确,没有和其他配置类冲突。如果是Quarkus项目,直接用框架自带的SmallRye Config,别自己瞎引别的版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:52:43