Тест Junit, получающий доступ к ресурсу CP, завершается с ошибкой в gitlab, но работает локально

#java #gradle #junit #gitlab

# #java #gradle #junit #gitlab

Вопрос:

Я настраиваю конвейер gitlab, но сборка завершается с ошибкой. Странно, я не вижу проблемы. JUnit 4.12, gradle 4.8.1.

Тест

 public class ClientTest {
@Test
public void test() throws JAXBException, SAXException {
    String xml = ClientTest.class.getClassLoader().getResource("xml/Client.xml").getFile();
    ClientEventReq req = (ClientEventReq) unmarshaller.unmarshal(new File(xml));
 

Я сохранил build каталог как артефакт, и он выглядит правильно и равен локальной машине:

 module/build/resources/test/xml/Client.xml
 

Но он завершается с ошибкой в gitlab с:

 java.nio.file.NoSuchFileException: builds/product/module/build/resources/test/xml/Client.xml
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.Files.readAllBytes(Files.java:3152)
at ClientTest.test(ClientModificationEventReqTest.java:41)
 

Я добавил еще несколько команд, чтобы определить, где находятся файлы

 $ pwd
/builds/product
$ ls
module
gradle
gradlew
gradlew.bat
settings.gradle
$ ls builds/product/module
ls: cannot access 'builds/product/module': No such file or directory
 

Таким образом, кажется, что текущий каталог — это /builds/product то, что java хочет получить файл builds/product/module/build/resources/test/xml/Client.xml .

Ответ №1:

Я переписал код для использования URL вместо File :

 URL url = ClientModificationEventReqTest.class.getClassLoader().getResource(path);
ClientEventReq req = (ClientEventReq) unmarshaller.unmarshal(url);