Utilizzo di JUnit 5 con Gradle

1. Panoramica

In questo tutorial, eseguiremo test sulla nuova piattaforma JUnit 5 con lo strumento di compilazione Gradle.

Configureremo un progetto che supporti sia la vecchia che la nuova versione.

Sentiti libero di leggere A Guide to JUnit 5 per ulteriori informazioni sulla nuova versione. O l'Introduzione a Gradle per informazioni approfondite sullo strumento di costruzione.

2. Impostazione Gradle

Innanzitutto, verifichiamo se è installata la versione 4.6 o successiva dello strumento di compilazione poiché è la prima versione che funziona con JUnit 5.

Il modo più semplice è eseguire semplicemente il comando gradle -v :

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

E, se necessario, possiamo seguire i passaggi di installazione per ottenere la versione giusta.

Una volta installato tutto, dobbiamo quindi configurare Gradle utilizzando il file build.gradle .

Possiamo iniziare fornendo la piattaforma di unit test allo strumento di compilazione:

test { useJUnitPlatform() } 

Ora che abbiamo specificato la piattaforma, dobbiamo fornire le dipendenze JUnit. È qui che vediamo una notevole differenza tra JUnit 5 e le versioni precedenti.

Vedi, con le versioni precedenti, avevamo solo bisogno di una dipendenza. In JUnit 5, tuttavia, l'API è separata dal runtime, il che significa due dipendenze.

L'API è manifest con junit-jupiter-api . Il runtime è junit-jupiter-engine per JUnit 5 e junit-vintage-engine per JUnit 3 o 4.

Forniremo questi due in testImplementation e timeRuntimeOnly , rispettivamente:

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

3. Creazione di test

Scriviamo il nostro primo test. Sembra proprio come le versioni precedenti:

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

Ora possiamo eseguire il test eseguendo il comando gradle clean test .

Per verificare che stiamo usando JUnit 5 possiamo guardare le importazioni. Le importazioni per @Test e assertEquals dovrebbero avere un pacchetto che inizia con org.junit.jupiter.api:

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

Quindi, nell'ultimo esempio, abbiamo creato un test con funzionalità "vecchie" che funziona da anni. Creeremo ora un altro esempio che utilizza alcune delle nuove funzionalità in JUnit 5:

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

assertThrows è una nuova asserzione in JUnit5 che sostituisce il vecchio stile di @Test (previsto = ArithmeticException.class).

4. Configurazione dei test JUnit 5 con Gradle

Successivamente, esploreremo un'integrazione più profonda tra Gradle e JUnit5.

Supponiamo di avere due tipi di test nella nostra suite: di lunga durata e di breve durata. Potremmo usare l' annotazione 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); }); } }

Quindi, diciamo allo strumento di compilazione quali eseguire. Nel nostro caso, eseguiamo solo i test di breve durata (veloci):

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

5. Abilitazione del supporto per le vecchie versioni

Ora è ancora possibile creare test JUnit 3 e 4 con il nuovo motore Jupiter. Inoltre, possiamo combinarli con la nuova versione nello stesso progetto, diciamo, in uno scenario di migrazione.

To start we add some dependencies to the existing build configuration:

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

Note how our project now has both junit-jupiter-engine as well as junit-vintage-engine.

Now we create a new class and copy paste the testDivide method we created earlier. Then, we add the imports for @Test and assertEquals. However, this time we make sure to use the old version 4 packages starting which 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. Conclusion

In this tutorial, we integrated Gradle with JUnit 5. Even more, we also added support for versions 3 and 4.

We've seen that the build tool provides excellent support for the old and new versions. Hence we can use the new features in an existing project without the need to change all our existing tests.

L'esempio di codice completo è disponibile nel progetto GitHub. Sentiti libero di usarlo come punto di partenza per il tuo progetto.