我正在使用Vertx并尝试测试一些参数,这些参数是我从jsonfile获取数据的,目前可以正常工作,但我想仅通过类路径来获取此文件,以便可以在另一台计算机上对其进行测试。
private ConfigRetriever getConfigRetriever() {
ConfigStoreOptions fileStore = new ConfigStoreOptions().setType("file").setOptional(true)
.setConfig(new JsonObject()
.put("path", "/home/user/MyProjects/MicroserviceBoilerPlate/src/test/resources/local_file.json"));
ConfigStoreOptions sysPropsStore = new ConfigStoreOptions().setType("sys");
ConfigRetrieverOptions options = new ConfigRetrieverOptions().addStore(fileStore).addStore(sysPropsStore);
return ConfigRetriever.create(Vertx.vertx(), options);
}
我上面写的路径从/ home / dir开始,这使得无法在另一台机器上进行测试。我下面的测试使用此配置
@Test
public void tourTypes() {
ConfigRetriever retriever = getConfigRetriever();
retriever.getConfig(ar -> {
if (ar.failed()) {
// Failed to retrieve the configuration
} else {
JsonObject config = ar.result();
List<String> extractedIds = YubiParserServiceCustomImplTest.getQueryParameters(config, "tourTypes");
assertEquals(asList("1", "2", "3", "6"), extractedIds);
}
});
}
我想将路径设为类路径,以便可以在所有环境中对其进行测试。 我试图像这样访问类路径,但不确定应如何设置
private void fileFinder() {
Path p1 = Paths.get("/test/resources/local_file.json");
Path fileName = p1.getFileName();
}
答案 0 :(得分:3)
如果您将文件存储在"src/test/resources"
中,则可以使用
InputStream confFile = getClass().getResourceAsStream("/local_file.json");
或
URL url = getClass().getResource("/local_file.json");
在测试课程(example)内
重要! 在两种情况下,文件名都可以以/开头。如果是这样,它将从类路径的根开始。如果不是,则从调用该方法的类的包开始。
答案 1 :(得分:2)
将.json文件放入项目(here an example)的/resources
文件夹中。
然后通过ClassLoader.getResourceAsStream
访问它:
InputStream configFile = ClassLoader.getResourceAsStream("path/to/file.json");
JsonObject config = new JsonParser().parse(configFile);
// Then provide this config to Vertx
答案 2 :(得分:2)
据我了解,考虑到json文件的位置,您只需要这样做:
.setConfig(new JsonObject().put("path", "local_file.json"));
请参阅this以供参考。