我可以在我的测试 class 中覆盖 quarkus application.properties 值吗?

Can I override quarkus application.properties value in my test class?

我在我的 quarkus 中配置了一个值 application.properties

skipvaluecheck=true

现在每当我想执行测试时,我都希望将此值设置为 false 而不是 true。但是我不想在application.properties里面改,因为会影响最新的应用部署。我只希望我的测试以 false 值执行,以便我的测试覆盖率在声纳中变为绿色。

从 java 代码中,我通过以下操作获取此值

ConfigProvider.getConfig().getValue("skipvaluecheck", Boolean.class);

Sprint boot 中已经存在类似的东西,我很好奇 quarkus 中是否也存在这样的东西

您需要定义 io.quarkus.test.junit.QuarkusTestProfile 的实现并通过 @TestProfile 添加到测试中。

类似于:

@QuarkusTest
@TestProfile(MyTest.MyProfile.class)
public class MyTest {
    @Test
    public void testSomething() {

    }

    public static class BuildTimeValueChangeTestProfile implements QuarkusTestProfile {

        @Override
        public Map<String, String> getConfigOverrides() {
            return Map.of("skipvaluecheck", "true");
        }
    }
}

查看更多详情可见here

Quarkus 为此提供了 QuarkusTestProfile 的使用,您可以像这样定义一个配置文件:

public class CustomTestProfile implements QuarkusTestProfile {

    Map<String, String> getConfigOverrides() {
        return Map.of("skipvaluecheck", "false");
    }

}

然后在你的测试中 class:

@QuarkusTest
@TestProfile(CustomTestProfile.class)
public class TestClass {
//...(etc)...

此处提供更多信息:https://quarkus.io/blog/quarkus-test-profiles/

Quarkus 应用程序属性具有配置文件。例如

quarkus.log.level=WARN
%test.quarkus.log.level=INFO

这样(使用前缀 %test.)您可以设置不同的测试值而不是生产值。 您还可以设置 %dev.,当您处于 运行 本地开发模式时。

参考https://quarkus.io/guides/config-reference#profiles