Quarkus 自定义测试资源目录
Quarkus custom test resources dir
我们在我们的项目中使用多个源集进行测试,这些源集在 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/functional/resources/application-test.yml
。
Quarkus 不会从该位置读取属性,并且内部似乎只有 main
和 test
路径被硬编码,有没有办法将自定义目录附加到资源解析中?
我们也尝试过将自定义配置文件设置为 functionalTest
或 functional-test
,但这也无济于事:
@QuarkusTest
@TestProfile(FunctionalTestProfile.class)
class FrontendControllerTest {}
import io.quarkus.test.junit.QuarkusTestProfile;
public class FunctionalTestProfile implements QuarkusTestProfile {
public String getConfigProfile() {
return "functionalTest";
}
}
我们最终使用自定义测试配置文件进行功能测试,它以与 quarkus 内部相同的方式手动获取和合并资源:
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)
我们在我们的项目中使用多个源集进行测试,这些源集在 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/functional/resources/application-test.yml
。
Quarkus 不会从该位置读取属性,并且内部似乎只有 main
和 test
路径被硬编码,有没有办法将自定义目录附加到资源解析中?
我们也尝试过将自定义配置文件设置为 functionalTest
或 functional-test
,但这也无济于事:
@QuarkusTest
@TestProfile(FunctionalTestProfile.class)
class FrontendControllerTest {}
import io.quarkus.test.junit.QuarkusTestProfile;
public class FunctionalTestProfile implements QuarkusTestProfile {
public String getConfigProfile() {
return "functionalTest";
}
}
我们最终使用自定义测试配置文件进行功能测试,它以与 quarkus 内部相同的方式手动获取和合并资源:
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)