我能否在我的测试类中覆盖 Quarkus 应用程序属性值?

11

我在我的Quarkus应用程序属性中配置了一个值。

skipvaluecheck=true

现在,每当我想执行我的测试时,我希望将这个值设置为false而不是true。但我不想改变application.properties中的值,因为这会影响最新的应用程序部署。我只想让我的测试使用false值执行,以便我的测试覆盖率在sonar中变为绿色。
从Java代码中,我通过以下方式获取此值:
ConfigProvider.getConfig().getValue("skipvaluecheck", Boolean.class);

类似的东西已经在Spring Boot中存在,我很好奇是否在Quarkus中也存在这样的东西。

如何在Junit测试中覆盖默认的Spring Boot application.properties设置?

5个回答

17
您需要定义一个实现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");
        }
    }
}

可以在这里找到更多详细信息。


@TestProfile()必须引用MyTest.BuildTimeValueChangeTestProfile.class而不是MyTest.MyProfile.class。它应该是这样的:@TestProfile(MyTest.BuildTimeValueChangeTestProfile.class)。 - undefined

3
Quarkus提供了QuarkusTestProfile的使用,你可以定义一个类似这样的配置文件:
public class CustomTestProfile implements QuarkusTestProfile {

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

}

然后在你的测试类中:

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

更多信息请点击这里:https://quarkus.io/blog/quarkus-test-profiles/


3
Quarkus应用程序属性具有配置文件。例如:
quarkus.log.level=WARN
%test.quarkus.log.level=INFO

那么(使用前缀%test.),您可以设置不同的值进行测试,而不是生产值。您还可以在本地开发模式下设置%dev.
请参见https://quarkus.io/guides/config-reference#profiles了解详情。

2
您可以创建一个名为application-test.yaml的文件,其中指定要覆盖的属性。您必须将其放置在与默认的application.yaml相同的文件夹中(即使它是空的,也必须有)。我指的是这个票:https://github.com/quarkusio/quarkus/issues/24900 如果您在测试中使用@QuarkusTest注释,则默认情况下会使用“test”配置文件。

0
从Quarkus 3.2开始,有一个实验性功能叫做Testing Components
io.quarkus:quarkus-junit5-component添加为测试依赖项。
然后,您可以使用注解@TestConfigProperty来覆盖整个测试类的属性:
import io.quarkus.test.component.TestConfigProperty;
import io.quarkus.test.component.QuarkusComponentTest;

@QuarkusComponentTest 
@TestConfigProperty(key = "skipvaluecheck", value = "false") 
public class MyAwesomeTest {

  // your tests

}

请注意,这对于您的经典@QuarkusTest类不起作用,因为这是一种轻量级测试,不会运行整个CDI容器如此声明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接