Saya sedang mengerjakan sebuah proyek di mana panggilan internal kelas biasa tetapi hasilnya berkali-kali nilai sederhana. Contoh ( bukan kode sebenarnya ):
public boolean findError(Set<Thing1> set1, Set<Thing2> set2) {
if (!checkFirstCondition(set1, set2)) {
return false;
}
if (!checkSecondCondition(set1, set2)) {
return false;
}
return true;
}
Tes unit menulis untuk jenis kode ini benar-benar sulit karena saya hanya ingin menguji sistem kondisi dan bukan penerapan kondisi aktual. (Saya melakukan itu dalam tes terpisah.) Sebenarnya akan lebih baik jika saya melewati fungsi yang menerapkan kondisi dan dalam tes saya cukup memberikan beberapa tiruan. Masalah dengan pendekatan ini adalah kebisingan: kami banyak menggunakan obat generik .
Solusi yang berfungsi; Namun, adalah untuk membuat objek yang diuji menjadi mata - mata dan mengejek panggilan ke fungsi internal.
systemUnderTest = Mockito.spy(systemUnderTest);
doReturn(true).when(systemUnderTest).checkFirstCondition(....);
Kekhawatiran di sini adalah bahwa implementasi SUT diubah secara efektif dan mungkin bermasalah untuk menjaga agar tes tetap sinkron dengan implementasi. Apakah ini benar? Apakah ada praktik terbaik untuk menghindari gangguan pemanggilan metode internal ini?
Perhatikan bahwa kita berbicara tentang bagian-bagian suatu algoritma, jadi membaginya ke beberapa kelas mungkin bukan keputusan yang diinginkan.