从类路径获取文件,以便测试可以在所有计算机上运行

时间:2018-07-13 09:20:53

标签: java vert.x

我正在使用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();
}

3 个答案:

答案 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以供参考。