我能否在测试类中覆盖Quarkus的application.properties配置值?
Quarkus原生支持测试阶段覆盖配置,完全不需要修改主资源的application.properties,以下是3种常用实现方案,按需选择即可:
方案1:@WithConfigProperty 注解(单测试类/单测试用例生效)
该方案灵活度最高,不需要新增任何配置文件,直接在测试代码上添加注解即可,适配仅部分测试需要修改配置的场景,Quarkus 2.0及以上版本均支持:
import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.WithConfigProperty; import org.junit.jupiter.api.Test; import org.eclipse.microprofile.config.ConfigProvider; // 注解加在类上,当前类所有测试用例生效 @QuarkusTest @WithConfigProperty(name = "skipvaluecheck", value = "false") public class ValueCheckTest { @Test // 注解也可以加在单个测试方法上,仅当前用例生效 // @WithConfigProperty(name = "skipvaluecheck", value = "false") public void testCheckLogic() { // 此处读取到的配置值为false Boolean skipCheck = ConfigProvider.getConfig().getValue("skipvaluecheck", Boolean.class); // 你的测试逻辑 } }
方案2:测试目录新增配置文件(全局测试生效)
如果所有测试用例都需要将该配置改为false,直接在src/test/resources路径下新建application.properties文件,添加配置:
skipvaluecheck=false
测试运行时会优先加载测试类路径下的配置文件,同名配置项会自动覆盖主资源目录的配置,且该配置文件不会被打包到线上发布包中,完全不影响生产部署。
方案3:自定义测试Profile(多套测试配置切换)
如果需要区分多套测试配置场景,可以通过自定义测试Profile实现:
- 在
src/test/resources路径下新建application-ut.properties文件,添加配置:skipvaluecheck=false - 在测试类上指定使用该Profile:
@QuarkusTest @TestProfile(io.quarkus.test.junit.QuarkusTestProfile.class) public class ValueCheckTest { // 测试逻辑 }
也可以在执行测试命令时指定Profile参数:mvn test -Dquarkus.test.profile=ut
配置覆盖优先级从高到低:@WithConfigProperty 注解指定 > 测试类路径下配置文件 > 主资源目录下配置文件
内容的提问来源于stack exchange,提问作者Sandra
相关产品推荐
相关产品推荐

