Използване на JUnit 5 с Gradle

1. Общ преглед

В този урок ще стартираме тестове на новата платформа JUnit 5 с инструмента за изграждане на Gradle.

Ще конфигурираме проект, който поддържа както старата, така и новата версия.

Чувствайте се свободни да прочетете Ръководство за JUnit 5 за повече информация относно новата версия. Или Въведение в Gradle за задълбочена информация за инструмента за изграждане.

2. Настройка на Gradle

Първо проверяваме дали е инсталирана версия 4.6 или по-нова от инструмента за изграждане, тъй като това е най-ранната версия, която работи с JUnit 5.

Най-простият начин е просто да стартирате командата gradle -v :

$> gradle -v ------------------------------------------------------------ Gradle 4.10.2 ------------------------------------------------------------

И, ако е необходимо, можем да следваме стъпките за инсталиране, за да получим правилната версия.

След като инсталираме всичко, трябва да конфигурираме Gradle, като използваме файла build.gradle .

Можем да започнем с предоставяне на платформата за модулно тестване на инструмента за изграждане:

test { useJUnitPlatform() } 

След като определихме платформата, трябва да предоставим зависимостите JUnit. Тук виждаме забележителна разлика между JUnit 5 и по-ранните версии.

Вижте, при по-ранните версии ни трябваше само една зависимост. В JUnit 5 обаче API е отделен от средата на изпълнение, което означава две зависимости.

API е манифест с junit-jupiter-api . Времето за изпълнение е junit-jupiter-engine за JUnit 5 и junit-vintage-engine за JUnit 3 или 4.

Ще предоставим тези две съответно в testImplementation и timeRuntimeOnly :

dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1' }

3. Създаване на тестове

Нека напишем първия си тест. Изглежда точно като по-ранните версии:

@Test public void testAdd() { assertEquals(42, Integer.sum(19, 23)); }

Сега можем да стартираме теста, като изпълним командата gradle clean test .

За да проверим дали използваме JUnit 5, можем да разгледаме вноса. Вносът за @Test и assertEquals трябва да има пакет, започващ с org.junit.jupiter.api:

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals;

Така че в последния пример създадохме тест със „стара“ функционалност, който работи от години. Сега ще създадем друг пример, който използва част от новата функционалност в JUnit 5:

@Test public void testDivide() { assertThrows(ArithmeticException.class, () -> { Integer.divideUnsigned(42, 0); }); }

assertThrows е ново твърдение в JUnit5, което замества стария стил на @Test (очаквано = ArithmeticException.class).

4. Конфигуриране на тестове JUnit 5 с Gradle

След това ще проучим по-задълбочена интеграция между Gradle и JUnit5.

Да кажем, че в нашия пакет има два вида тестове: дългосрочни и краткосрочни. Можем да използваме анотацията JUnit 5 @Tag :

public class CalculatorJUnit5Test { @Tag("slow") @Test public void testAddMaxInteger() { assertEquals(2147483646, Integer.sum(2147183646, 300000)); } @Tag("fast") @Test public void testDivide() { assertThrows(ArithmeticException.class, () -> { Integer.divideUnsigned(42, 0); }); } }

След това казваме на инструмента за изграждане кои да се изпълнят. В нашия случай нека просто изпълним краткосрочните (бързи) тестове:

test { useJUnitPlatform { includeTags 'fast' excludeTags 'slow' } }

5. Активиране на поддръжка за стари версии

Все още е възможно да се създадат тестове JUnit 3 и 4 с новия двигател на Юпитер. Още повече, можем да ги смесим с новата версия в същия проект, да речем, в сценарий на миграция.

За начало добавяме някои зависимости към съществуващата конфигурация на компилация:

testCompileOnly 'junit:junit:4.12' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.3.1'

Обърнете внимание на начина ни проект вече има и двете JUnit-Юпитер-двигател , както и JUnit-ретро-двигател.

Сега създаваме нов клас и копираме поставяме метода testDivide , който създадохме по-рано. След това добавяме импортираните за @Test и assertEquals . Този път обаче се уверяваме, че използваме старата версия 4 пакети, започвайки от org.junit:

import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorJUnit4Test { @Test public void testAdd() { assertEquals(42, Integer.sum(19, 23)); } }

6. Заключение

В този урок интегрирахме Gradle с JUnit 5. Още повече, добавихме и поддръжка за версии 3 и 4.

Видяхме, че инструментът за изграждане осигурява отлична поддръжка за старата и новата версия. Следователно можем да използваме новите функции в съществуващ проект, без да е необходимо да променяме всички наши съществуващи тестове.

Пълният пример за код е наличен в проекта GitHub. Чувствайте се свободни да го използвате като отправна точка за вашия собствен проект.