JUnit 5 gebruiken met Gradle

1. Overzicht

In deze zelfstudie gaan we tests uitvoeren op het nieuwe JUnit 5-platform met de Gradle-buildtool.

We zullen een project configureren dat zowel de oude als de nieuwe versie ondersteunt.

Voel je vrij om A Guide to JUnit 5 te lezen voor meer informatie over de nieuwe versie. Of de Inleiding tot Gradle voor diepgaande informatie over de bouwtool.

2. Gradle-instellingen

Eerst controleren we of versie 4.6 of hoger van de build-tool is geïnstalleerd, aangezien dit de vroegste versie is die werkt met JUnit 5.

De eenvoudigste manier is om gewoon het gradle -v opdracht:

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

En indien nodig kunnen we de installatiestappen volgen om de juiste versie te krijgen.

Nadat we alles hebben geïnstalleerd, moeten we Gradle configureren met behulp van de build.gradle het dossier.

We kunnen beginnen met het leveren van het unit-testplatform aan de build-tool:

test {useJUnitPlatform ()} 

Nu we het platform hebben gespecificeerd, moeten we de JUnit-afhankelijkheden leveren. Dit is waar we een opmerkelijk verschil zien tussen JUnit 5 en eerdere versies.

Kijk, met eerdere versies hadden we maar één afhankelijkheid nodig. In JUnit 5 is de API echter gescheiden van de runtime, wat twee afhankelijkheden betekent.

De API is manifest met junit-jupiter-api. De looptijd is junit-jupiter-engine voor JUnit 5, en junit-vintage-engine voor JUnit 3 of 4.

We leveren deze twee binnen testImplementation en timeRuntimeOnly, respectievelijk:

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

3. Tests maken

Laten we onze eerste test schrijven. Het ziet er net zo uit als eerdere versies:

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

Nu, we kunnen de test uitvoeren door het geleidelijke schone test opdracht.

Om te verifiëren dat we JUnit 5 gebruiken, kunnen we kijken naar de invoer. De invoer voor @Test en assertEquals zou een pakket moeten hebben dat begint met org.junit.jupiter.api:

importeer org.junit.jupiter.api.Test; importeer statische org.junit.jupiter.api.Assertions.assertEquals;

Dus in het laatste voorbeeld hebben we een test gemaakt met ‘oude 'functionaliteit die al jaren werkt. We zullen nu een ander voorbeeld maken dat een deel van de nieuwe functionaliteit in JUnit 5 gebruikt:

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

assertThrows is een nieuwe bewering in JUnit5 die de oude stijl van @Test (verwacht = ArithmeticException.class).

4. JUnit 5-tests configureren met Gradle

Vervolgens zullen we een diepere integratie tussen Gradle en JUnit5 onderzoeken.

Laten we zeggen dat we twee soorten tests in onze suite hebben: langlopend en kortlopend. We zouden de JUnit 5 kunnen gebruiken @Label annotatie:

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

Vervolgens vertellen we de build-tool welke moeten worden uitgevoerd. Laten we in ons geval de kortlopende (snelle) tests uitvoeren:

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

5. Ondersteuning inschakelen voor oude versies

Nu is het nog steeds mogelijk om JUnit 3- en 4-tests te maken met de nieuwe Jupiter-engine. Sterker nog, we kunnen ze combineren met de nieuwe versie in hetzelfde project, bijvoorbeeld in een migratiescenario.

Om te beginnen voegen we enkele afhankelijkheden toe aan de bestaande build-configuratie:

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

Merk op hoe ons project nu beide heeft junit-jupiter-engine net zoals junit-vintage-engine.

Nu maken we een nieuwe klasse en kopiëren en plakken we het testDivide methode die we eerder hebben gemaakt. Vervolgens voegen we de invoer toe voor @Test en assertEquals. Deze keer zorgen we er echter voor dat we de oude versie 4-pakketten gebruiken om te beginnen org.junit:

importeer statische org.junit.Assert.assertEquals; importeer org.junit.Test; openbare klasse CalculatorJUnit4Test {@Test openbare leegte testAdd () {assertEquals (42, Integer.sum (19, 23)); }}

6. Conclusie

In deze tutorial hebben we Gradle geïntegreerd met JUnit 5. Bovendien hebben we ook ondersteuning toegevoegd voor versies 3 en 4.

We hebben gezien dat de build-tool uitstekende ondersteuning biedt voor de oude en nieuwe versies. Daarom kunnen we de nieuwe functies in een bestaand project gebruiken zonder al onze bestaande tests te hoeven wijzigen.

Het volledige codevoorbeeld is beschikbaar in het GitHub-project. Gebruik het gerust als uitgangspunt voor uw eigen project.


$config[zx-auto] not found$config[zx-overlay] not found