Java >> Java tutorial >  >> Tag >> JUnit

Forskellen mellem fejl og fejl i JUnit

1. Introduktion

I dette selvstudie vil vi undersøge forskellene mellem en fejl og en fejl i JUnit-tests.

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

2. Eksempelkode

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

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

Bemærk, at Java faktisk ikke kaster en ArithmeticException alene for dobbelt division – det returnerer Uendeligt eller NaN .

3. Eksempel på fejl

Når du skriver enhedstests med JUnit, vil der sandsynligvis være situationer, hvor testene mislykkes. En mulighed er, atvores kode ikke opfylder dens testkriterier. Det betyder, at en eller flere testsager mislykkes på grund afpåstande, der 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 simpelthen ikke overens:

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

4. Eksempelfejl

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

Lad os se et eksempel, hvor testen vil afbryde med en fejl, fordi vi forsøger at dividere med nul, hvilket vi udtrykkeligt beskytter os imod ved at smide en undtagelse i vores lommeregnerkode:

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

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

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

Så, hvis undtagelsen kastes, består testen, men hvis ikke, ville det være endnu en fiasko.

5. Konklusion

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

Tjek også eksempelkoden på GitHub.


Java tag