Rozdiel medzi zlyhaním a chybou v JUnit

1. Úvod

V tomto tutoriále preskúmame rozdiely medzi zlyhaním a chybou v testoch JUnit.

Stručne povedané, zlyhania sú nesplnenými tvrdeniami, zatiaľ čo chyby sú spôsobené abnormálnym vykonaním testu.

2. Vzorový kód

Uvažujme o veľmi zjednodušenom príklade, konkrétne o triede kalkulačky, ktorá má jednu metódu na rozdelenie dvoch dvojitý hodnoty:

public static double divideNumbers (double dividend, double divisor) {if (divisor == 0) {throw new ArithmeticException ("Division by zero!"); } návratnosť dividendy / deliteľ; }

Poznač si to Java v skutočnosti nehádže Aritmetická výnimka samostatne pre dvojitý rozdelenie - vráti sa Nekonečno alebo NaN.

3. Príklad zlyhania

Pri písaní testov jednotiek s JUnit pravdepodobne nastanú situácie, keď testy zlyhajú. Jednou z možností je to náš kód nespĺňa svoje testovacie kritériá. To znamená, že jeden alebo viac testovacích prípadov zlyhá z dôvodu tvrdenia nie sú splnené.

V nasledujúcom príklade tvrdenie zlyhá, pretože výsledok rozdelenia je 2 a nie 15. Naše tvrdenie a skutočný výsledok sa jednoducho nezhodujú:

@Test void whenDivideNumbers_thenExpectWrongResult () {double result = SimpleCalculator.divideNumbers (6, 3); assertEquals (15, výsledok); }

4. Príklad chyby

Ďalšou možnosťou je, že máme neočakávaná situácia počas vykonávania testu, najpravdepodobnejšie v dôsledku výnimky; napríklad prístup k a nulový referencia zvýši a RuntimeException.

Pozrime sa na príklad, kde sa test preruší s chybou, pretože sa pokúšame vydeliť nulou, proti ktorej sa výslovne strážime, a to tak, že v kóde kalkulačky urobíme výnimku:

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

Teraz by sme mohli tento test opraviť jednoduchým zahrnutím výnimky ako jedného z našich tvrdení.

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

Potom, ak sa vyvolá výnimka, test prejde, ale ak nie, potom by to bolo ďalšie zlyhanie.

5. Záver

Porucha aj chyba v testoch JUnit naznačujú nežiaducu situáciu, ich sémantika je však odlišná. Zlyhania upozorňujú na neplatný výsledok testu, chyby naznačujú neočakávané vykonanie testu.

Skontrolujte tiež vzorový kód na GitHub.