Forskjellen mellom feil og feil i JUnit

1. Introduksjon

I denne opplæringen vil vi utforske forskjellene mellom en feil og en feil i JUnit-tester.

Kort sagt, feil er ikke oppfylte påstander mens feil skyldes unormal testutførelse.

2. Eksempelkode

La oss vurdere et veldig forenklet eksempel, nemlig en kalkulatorklasse som har en metode for å dele to dobbelt verdier:

offentlig statisk dobbel divisjonNumre (dobbelt utbytte, dobbelt divisor) {if (divisor == 0) {kast nytt ArithmeticException ("Divisjon med null!"); } returnere utbytte / divisor; }

Noter det Java kaster faktisk ikke en Aritmetisk unntak på egenhånd for dobbelt divisjon - den kommer tilbake evighet eller NaN.

3. Eksempel på svikt

Når du skriver enhetstester med JUnit, vil det sannsynligvis være situasjoner når testene mislykkes. En mulighet er at koden vår oppfyller ikke testkriteriene. Det betyr at en eller flere testsaker mislykkes pga påstander ikke blir oppfylt.

I det følgende eksemplet vil påstanden mislykkes, fordi resultatet av inndelingen er 2 og ikke 15. Vår påstand og det faktiske resultatet stemmer ikke overens:

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

4. Eksempel på feil

En annen mulighet er at vi har en uventet situasjon under testutførelsen, mest sannsynlig på grunn av et unntak; for eksempel tilgang til a null referanse vil heve en RuntimeException.

La oss se et eksempel der testen vil avbrytes med en feil fordi vi prøver å dele med null som vi eksplisitt beskytter mot ved å kaste et unntak i kalkulatorkoden vår:

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

Nå kan vi fikse denne testen ved ganske enkelt å ta med unntaket som en av våre påstander.

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

Så, hvis unntaket blir kastet, går testen, men hvis ikke, vil det være en annen feil.

5. Konklusjon

Både feil og feil i JUnit-tester indikerer en uønsket situasjon, men semantikken deres er forskjellig. Feil melder om et ugyldig testresultat, feil indikerer en uventet testutførelse.

Ta også en titt på eksempelkoden på GitHub.