提问者:小点点

QUUKUS自定义测试资源目录


我们在项目中使用多个源代码集进行测试,这些源代码集在gradle中定义如下:

sourceSets {
    test {
        java {
            srcDir file('src/test/unit/java')
        }
        resources.srcDir file('src/test/unit/resources')
    }
    functionalTest {
        java {
            compileClasspath += main.output
            runtimeClasspath += main.output
            srcDir file('src/test/functional/java')
        }
        resources.srcDir file('src/test/functional/resources')
    }
}

我们的应用程序属性文件位于此处:src/test/功能/资源/application ation-test. yml

QUKUS不会从这个位置读取属性,并且内部似乎只有maintest路径硬编码,有没有办法将自定义目录附加到资源解析中?

我们还尝试将自定义配置文件设置为功能测试功能测试,但它也没有帮助:

@QuarkusTest
@TestProfile(FunctionalTestProfile.class)
class FrontendControllerTest {}
import io.quarkus.test.junit.QuarkusTestProfile;

public class FunctionalTestProfile implements QuarkusTestProfile {

    public String getConfigProfile() {
        return "functionalTest";
    }
}

共1个答案

匿名用户

我们最终使用自定义测试配置文件进行功能测试,该配置文件手动获取和合并资源的方式与quakus在内部进行的方式相同:

import io.quarkus.config.yaml.runtime.ApplicationYamlConfigSourceLoader;
import io.quarkus.test.junit.QuarkusTestProfile;
import io.smallrye.config.source.yaml.YamlConfigSource;
import org.eclipse.microprofile.config.spi.ConfigSource;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class FunctionalTestProfile implements QuarkusTestProfile {

    @Override
    public Map<String, String> getConfigOverrides() {
        var sources = new ApplicationYamlConfigSourceLoader.InClassPath().getConfigSources(getClass().getClassLoader());
        Collections.reverse(sources);

        var result = new HashMap<String, String>();
        sources.stream()
            .filter(YamlConfigSource.class::isInstance)
            .map(ConfigSource::getProperties)
            .forEach(result::putAll);

        return result;
    }
}

然后在测试本身:

@QuarkusTest
@TestProfile(FunctionalTestProfile.class)