Статьи

Использование JUnit 5 в проектах до Java 8

Этот пост демонстрирует, как JUnit 5 может использоваться в проектах до Java 8, и объясняет, почему это может быть хорошей идеей.

JUnit 5 требует как минимум Java 8 в качестве среды выполнения, поэтому вы хотите обновить весь ваш проект до Java 8. Но иногда есть причина, по которой вы не можете сразу обновить ваш проект до Java 8. Например, версия вашего сервера приложений в производстве поддерживается только Java 7. Но обновление не выполняется быстро из-за некоторых проблем в вашем производственном коде.

Теперь вопрос в том, как вы можете использовать JUnit 5 без обновления вашего производственного кода до Java 8?

В Maven (наверняка также в Gradle) вы можете настроить версию Java отдельно для рабочего кода и для тестового кода.

01
02
03
04
05
06
07
08
09
10
11
12
13
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>7</source>
                <target>7</target>
                <testSource>8</testSource>
                <testTarget>8</testTarget>
            </configuration>
        </plugin>
    </plugins>
</build>

Предварительным условием является использование Java 8 JDK для вашей сборки.

Если вы попытаетесь использовать функцию Java 8 в производственном коде Java 7, Maven не удастся собрать.

1
2
3
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project junit5-in-pre-java8-projects: Compilation failure
[ERROR] /home/sparsick/dev/workspace/junit5-example/junit5-in-pre-java8-projects/src/main/java/Java7Class.java:[8,58] lambda expressions are not supported in -source 7
[ERROR]   (use -source 8 or higher to enable lambda expressions)

Теперь вы можете внедрить JUnit 5 в свой проект и начать писать тест с JUnit 5.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <scope>test</scope>
</dependency>
<!-- junit-vintage-engine is needed for running elder JUnit4 test with JUnit5-->
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
</dependency>

Ваши старые тесты JUnit 4 не нужно переносить, потому что JUnit 5 имеет тестовый механизм, который может запускать тесты JUnit 4 с JUnit 5. Поэтому используйте JUnit 5 для новых тестов и переносите тесты JUnit 4 только в том случае, если вам все равно нужно их касаться.

Хотя вы не можете обновить свой производственный код до более новой версии Java, есть некоторое преимущество, чтобы обновить ваш тестовый код до более новой.

Самым большим преимуществом является то, что вы можете начать изучать новый язык во время ежедневной работы, когда будете писать тесты. Вы не делаете ошибку новичка в производственном коде. У вас есть доступ к новым инструментам, которые могут помочь улучшить ваши тесты. Например, в JUnit 5 удобнее писать параметризованные тесты, чем в JUnit 4. По моему опыту, разработчик пишет скорее параметризованный тест с JUnit 5, чем с JUnit 4 в ситуации, когда имеет смысл параметризованный тест.

Вышеописанная методика также работает для другой версии Java. Например, ваш рабочий код работает на Java 11, и вы хотите использовать функцию Java 12 в своем тестовом коде. Другим примером использования этой техники может быть изучение другого языка JVM, такого как Groovy, Kotlin или Clojure, в вашей повседневной работе. Затем используйте новый язык в своем тестовом коде.

Одна маленькая ловушка имеет такой подход. IntelliJ IDEA не может настроить версию Java для производства и тестирования отдельно. Поэтому вы должны установить весь проект на Java 8. Только сборка Maven дает вам обратную связь, если ваш производственный код использует правильную версию Java.

связи

Опубликовано на Java Code Geeks с разрешения Сандры Парсик, партнера нашей программы JCG. См. Оригинальную статью здесь: Использование JUnit 5 в проектах до Java 8

Мнения, высказанные участниками Java Code Geeks, являются их собственными.