Razlika između neuspjeha i pogreške u JUnit-u

1. Uvod

U ovom uputstvu istražit ćemo razlike između kvara i pogreške u JUnit testovima.

Ukratko, neuspjesi su neispunjene tvrdnje, a pogreške su rezultat abnormalnog izvođenja testa.

2. Uzorak koda

Razmotrimo vrlo pojednostavljeni primjer, naime klasu kalkulatora koja ima jednu metodu za dijeljenje dvije dvostruko vrijednosti:

javni statički double doubleNumbers (dvostruka dividenda, dvostruki djelitelj) {if (djelitelj == 0) {baciti novo ArithmeticException ("Podjela s nulom!"); } povrat dividende / djelitelja; }

Imajte na umu da Java zapravo ne baca ArithmeticException samostalno za dvostruko podjela - vraća se Beskonačnost ili NaN.

3. Primjer neuspjeha

Prilikom pisanja jediničnih testova s ​​JUnit-om, vjerojatno će biti situacija kada testovi ne uspiju. Jedna je mogućnost to naš kôd ne ispunjava kriterije ispitivanja. To znači da jedan ili više testnih slučajeva ne uspijevaju zbog tvrdnje koje nisu ispunjene.

U sljedećem primjeru tvrdnja neće uspjeti jer je rezultat podjele 2, a ne 15. Naša se tvrdnja i stvarni rezultat jednostavno ne podudaraju:

@Test void whenDivideNumbers_thenExpectWrongResult () {dvostruki rezultat = SimpleCalculator.divideNumbers (6, 3); assertEquals (15, rezultat); }

4. Primjer pogreške

Druga mogućnost je da imamo neočekivana situacija tijekom izvođenja testa, najvjerojatnije zbog iznimke; na primjer, pristup a null referenca će podići a RuntimeException.

Pogledajmo primjer, gdje će test prekinuti s pogreškom, jer pokušavamo podijeliti s nulom, od čega se izričito čuvamo dodavanjem iznimke u naš kalkulator:

@Test void whenDivideByZero_thenThrowsException () {SimpleCalculator.divideNumbers (10, 0); } 

Sada bismo mogli popraviti ovaj test jednostavnim uključivanjem iznimke kao jedne od naših tvrdnji.

@Test void whenDivideByZero_thenAssertException () {assertThrows (ArithmeticException.class, () -> SimpleCalculator.divideNumbers (10, 0)); }

Tada, ako se izuzetak izbaci, test prolazi, ali ako ne, onda bi to bio novi neuspjeh.

5. Zaključak

I neuspjeh i pogreška u JUnit testovima ukazuju na neželjenu situaciju, ali njihova se semantika razlikuje. Neuspjeh obavještava o nevaljanom rezultatu testa, pogreške ukazuju na neočekivano izvršenje testa.

Također, pogledajte primjer koda na GitHub-u.