Путь к ресурсам тестирования на Windows в Java модульных тестах - PullRequest
3 голосов
/ 24 января 2020

Я использую этот код, чтобы получить 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: Illegal char <: > в индексе 2: / D: / a / имя проекта / имя репо / цель / классы испытаний / цель1

С помощью трассировки стека (с компьютера CI):

at 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 в платформе- агности c кстати? Я хочу использовать один и тот же код для Unix и Windows машин. (Мне трудно отладить эту проблему, потому что у меня нет Windows машины, только CI с Windows.)

1 Ответ

3 голосов
/ 24 января 2020

Следующее работает на моей машине Windows, в то время как ваш пример также завершается с ошибкой, как и ожидалось:

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

Я предполагаю, что это потому, что синтаксический анализ URI отличается от реализации синтаксического анализа строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...