java单元测试中windows上的测试资源路径

kfgdxczn  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(353)

我用这个代码来得到一个 Path 对于测试代码中的测试资源文件:

Path target = Path.of(
    Thread.currentThread().getContextClassLoader()
      .getResource("target1").getFile()
);

文件位于 src/test/resources/target1 在构建时复制到 target/test-classes/tartget1 .
它在类似unix的系统上运行良好,但在windows上却抛出了一个例外:
java.nio.file.invalidpathexception:索引2处的非法字符<:>:/d:/a/项目名称/repo名称/target/测试类/target1
使用stacktrace(来自ci计算机):
在java.base/sun.nio.fs.windowspathparser.normalize(windowspathparser。java:182)
在java.base/sun.nio.fs.windowspathparser.parse(windowspathparser。java:153)
在java.base/sun.nio.fs.windowspathparser.parse(windowspathparser。java:77)
在java.base/sun.nio.fs.windowspath.parse(windowspath。java:92)
在java.base/sun.nio.fs.windowsfilesystem.getpath(windowsfilesystem。java:229)
在java.base/java.nio.file.path.of(path。java:147)
什么是获得成功的正确方法 Path 以平台不可知论的方式?我想对unix和windows机器使用相同的代码(对我来说调试这个问题很困难,因为我没有windows机器专用ci和windows。)

ipakzgxi

ipakzgxi1#

以下在我的windows计算机上运行,而您的示例也如预期的那样失败:

try {
  Path target = Paths.get(Thread.currentThread().getContextClassLoader()
      .getResource(FILE).toURI());
  System.out.println(target);
} catch (URISyntaxException e) {
  e.printStackTrace();
}

我假设这是因为解析uri的实现与解析字符串的实现不同。

相关问题