Perbedaan Antara Kegagalan dan Kesalahan di JUnit

1. Perkenalan

Dalam tutorial ini, kita akan mempelajari perbedaan antara kegagalan dan kesalahan dalam pengujian JUnit.

Singkatnya, kegagalan adalah pernyataan yang tidak terpenuhi sementara kesalahan disebabkan oleh eksekusi uji yang tidak normal.

2. Kode Contoh

Mari kita perhatikan contoh yang sangat sederhana, yaitu kelas kalkulator yang memiliki satu metode untuk membagi dua nilai ganda :

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

Perhatikan bahwa Java sebenarnya tidak melempar ArithmeticException sendiri untuk pembagian ganda - ia mengembalikan Infinity atau NaN .

3. Contoh Kegagalan

Saat menulis pengujian unit dengan JUnit, kemungkinan akan ada situasi ketika pengujian gagal. Salah satu kemungkinannya adalah kode kami tidak memenuhi kriteria pengujiannya. Artinya, satu atau beberapa kasus pengujian gagal karena pernyataan tidak terpenuhi.

Dalam contoh berikut, pernyataan akan gagal, karena hasil pembagian adalah 2 dan bukan 15. Pernyataan kami dan hasil sebenarnya tidak cocok:

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

4. Kesalahan Contoh

Kemungkinan lainnya adalah kami mengalami situasi yang tidak terduga selama eksekusi uji, kemungkinan besar karena pengecualian ; misalnya, mengakses referensi null akan memunculkan RuntimeException .

Mari kita lihat contoh, di mana pengujian akan dibatalkan dengan kesalahan karena kita mencoba untuk membagi dengan nol yang secara eksplisit kita jaga dengan melemparkan pengecualian dalam kode kalkulator kita:

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

Sekarang, kami dapat memperbaiki pengujian ini hanya dengan memasukkan pengecualian sebagai salah satu pernyataan kami.

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

Kemudian, jika pengecualian dilemparkan, tes akan lolos, tetapi jika tidak maka itu akan menjadi kegagalan lain.

5. Kesimpulan

Kegagalan dan kesalahan dalam pengujian JUnit menunjukkan situasi yang tidak diinginkan, tetapi semantiknya berbeda. Kegagalan memberi tahu hasil tes yang tidak valid, kesalahan menunjukkan eksekusi tes yang tidak terduga.

Juga, lihat kode contoh di GitHub.