Forskellen mellem fejl og fejl i JUnit

1. Introduktion

I denne vejledning undersøger vi forskellene mellem en fejl og en fejl i JUnit-test.

Kort sagt, fejl er uopfyldte påstande, mens fejl skyldes unormal testudførelse.

2. Prøvekode

Lad os overveje et meget forenklet eksempel, nemlig en lommeregnerklasse, der har en metode til at opdele to dobbelt værdier:

public static double divideNumbers (double dividend, double divisor) {if (divisor == 0) {throw new ArithmeticException ("Division by zero!"); } returnere udbytte / divisor }

Noter det Java kaster faktisk ikke en Aritmetisk undtagelse alene for dobbelt division - den vender tilbage Uendelighed eller NaN.

3. Eksempel på fejl

Når du skriver enhedstest med JUnit, vil der sandsynligvis være situationer, hvor test mislykkes. En mulighed er, at vores kode opfylder ikke testkriterierne. Det betyder, at en eller flere testsager mislykkes på grund af påstande ikke er opfyldt.

I det følgende eksempel vil påstanden mislykkes, fordi resultatet af divisionen er 2 og ikke 15. Vores påstand og det faktiske resultat stemmer ikke overens:

@Test ugyldigt nårDivideNumbers_thenExpectWrongResult () {dobbelt resultat = SimpleCalculator.divideNumbers (6, 3); assertEquals (15, resultat); }

4. Eksempel på fejl

En anden mulighed er, at vi har en uventet situation under testudførelsen, sandsynligvis på grund af en undtagelse; for eksempel adgang til en nul reference vil hæve en RuntimeException.

Lad os se et eksempel, hvor testen afbrydes med en fejl, fordi vi forsøger at dele med nul, som vi eksplicit beskytter mod ved at kaste en undtagelse i vores regnemaskekode:

@Test ugyldigt nårDivideByZero_thenThrowsException () {SimpleCalculator.divideNumbers (10, 0); } 

Nu kunne vi rette denne test ved blot at medtage undtagelsen som en af ​​vores påstande.

@Test ugyldigt nårDivideByZero_thenAssertException () {assertThrows (ArithmeticException.class, () -> SimpleCalculator.divideNumbers (10, 0)); }

Derefter, hvis undtagelsen smides, går testen igennem, men hvis ikke, ville det være en anden fiasko.

5. Konklusion

Både fiasko og fejl i JUnit-test indikerer en uønsket situation, men deres semantik er forskellig. Fejl underrettes om et ugyldigt testresultat, fejl indikerer en uventet testudførelse.

Tjek også eksemplets kode på GitHub.