Pengantar Pengujian di Java
Maria Milusheva
Senior Software Engineer
Ingat alur dependensi pada pelajaran sebelumnya: Aplikasi konversi mata uang bergantung pada server bank:

Perhitungan tak bisa diverifikasi karena kurs valas tidak dapat diprediksi.
Mocking: membuat objek atau perilaku tiruan untuk objek nyata yang sulit dipakai dalam tes, sehingga kita bisa menguji tanpa bergantung pada dependensi eksternal.
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

Pertimbangkan pelajaran sebelumnya:
public double convertEuroTo(String currency, double amount) {
double rate = this.bank.getRateEuroTo(currency);
return amount * rate;
}
➡ Buat objek EuropeanCentralBankServer yang dapat diprediksi untuk pengujian
Begini cara menguji dengan mock:
@Test void convert_returnsExpectedValue() { EuropeanCentralBankServer bank = mock(EuropeanCentralBankServer.class); ExchangeApp exchangeApp = new ExchangeApp(bank);// Perlu memprogram mock agar bisa bekerja when(bank.getRateEuroTo("USD")).thenReturn(1.1);// Memanggil getRateEuroTo dari objek mock, menggunakan nilai yang sudah diprogram double result = exchangeApp.convertEuroTo("USD", 1000); assertEquals(1100, result); // Sekarang kita bisa asert nilai pasti }
Jangan lupa memprogram mock kita:
@Test
void convert_returnsExpectedValue() {
EuropeanCentralBankServer bank = mock(EuropeanCentralBankServer.class);
ExchangeApp exchangeApp = new ExchangeApp(bank);
// Tidak ada pemrograman mock - objek mock bank tidak tahu cara merespons getRateEuroTo
double result = exchangeApp.convertEuroTo("USD", 1000);
assertEquals(1100, result); // Akan gagal karena setup mock kurang
}
Tes gagal dengan:
org.opentest4j.AssertionFailedError:
Expected :1100.0
Actual :0.0
Memprogram mock disebut stubbing.
Stubbing: memberi jawaban minimal dan terdefinisi untuk panggilan selama tes, dan biasanya tidak merespons hal lain di luar yang diprogram untuk tes.
Mockito juga bisa mensimulasikan skenario error:
EuropeanCentralBankServer bank = mock(EuropeanCentralBankServer.class);
ExchangeApp exchangeApp = new ExchangeApp(bank);
// Alih-alih thenReturn() gunakan thenThrow()
when(bank.getRateEuroTo("USD"))
.thenThrow(new RuntimeException("Bank server unavailable."));
exchangeApp.convertEuroTo("USD", 1000); // getRateEuroTo akan melempar exception
Pengantar Pengujian di Java