Maven тест запускает локальные сбои в среде CI - PullRequest
0 голосов
/ 24 мая 2018

У меня есть файл src/test/resources/ConfigTest.json с моей тестовой конфигурацией.Мой вспомогательный класс тестирования maven (enum) имеет следующие 2 строки:

ClassLoader c = this.getClass().getClassLoader();
File configFile = new File(c.getResource("ConfigTest.json").getFile());

Когда я запускаю mvn test из Eclipse или локальной командной строки, работает как положено.Однако при запуске из конвейера Bitbucket он выдает NullPointerException за то, что файл не найден.Мой bitbucket-pipelines.yml файл:

image: maven:3.3.9
clone:
  depth: full
pipelines:
  default:
    - step:
        caches:
          - maven
        script:
          - mvn -B verify

Я также пытался:

  • использовать класс: this.getClass().getResource("/ConfigTest.json")
  • использовать поток: ClassLoader c = Thread.currentThread().getContextClassLoader()

Полный пример класса:

import java.io.File;
import org.junit.Assert;
import org.junit.Test;

public class ClassLoaderTest {

    @Test
    public final void test() {
        ClassLoader c = this.getClass().getClassLoader();
        File configFile = new File(c.getResource("ConfigTest.json").getFile());
        Assert.assertTrue(configFile.exists());
    }
}

Что мне не хватает?Чем среда исполнения Bitbucket отличается от моей локальной среды, когда дело касается загрузки ресурсов?

Обновление POM.XML

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>io.projectcastle</groupId>
        <artifactId>io.projectcastle.tjwt2sfoauth</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>Authentication using custom JWT</name>
        <description>Translates custom JWT into OAuth session</description>

        <properties>
            <java.version>1.8</java.version>
        </properties>

        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>

        <dependencies>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>

        </dependencies>
    </project>

1 Ответ

0 голосов
/ 05 июня 2018

Тайна раскрыта.Кульминацией была эта строка в моем .bash_profile на моем Mac:

       # Case-insensitive globbing (used in pathname expansion)
       shopt -s nocaseglob;

Это позволяет getResourceAsStream(name) (и любой другой операции с файлами) находить файлы без учета регистра.Я предполагал, что Java на Mac всегда будет чувствительна к регистру.

В имени моего ресурса была одна ошибка с заглавными буквами, поэтому конвейер по праву не удался.Исправлена ​​опечатка, все хорошо.

: blush:

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