Anda memiliki kelas X dan Anda menulis beberapa unit test yang memverifikasi perilaku X1. Ada juga kelas A yang menganggap X sebagai ketergantungan.
Ketika Anda menulis tes unit untuk A, Anda mengejek X. Dengan kata lain, saat pengujian unit A, Anda mengatur (mendalilkan) perilaku dari tiruan X menjadi X1. Waktu berlalu, orang menggunakan sistem Anda, perlu berubah, X berevolusi: Anda memodifikasi X untuk menunjukkan perilaku X2. Jelas, tes unit untuk X akan gagal dan Anda harus menyesuaikannya.
Tapi bagaimana dengan A? Tes unit untuk A tidak akan gagal ketika perilaku X diubah (karena mengejek X). Bagaimana mendeteksi bahwa hasil A akan berbeda ketika dijalankan dengan X "asli" (dimodifikasi)?
Saya mengharapkan jawaban di sepanjang baris: "Itu bukan tujuan pengujian unit", tetapi nilai apa yang dimiliki unit testing? Apakah itu benar-benar hanya memberitahu Anda bahwa ketika semua tes lulus, Anda belum memperkenalkan perubahan yang melanggar? Dan ketika beberapa perilaku kelas berubah (secara sukarela atau tidak), bagaimana Anda dapat mendeteksi (lebih disukai dengan cara otomatis) semua konsekuensinya? Bukankah seharusnya kita lebih fokus pada pengujian integrasi?
X1
Anda mengatakan bahwa X
mengimplementasikan antarmuka X1
. Jika Anda mengubah antarmuka X1
ke X2
tiruan yang Anda gunakan dalam tes lain tidak boleh dikompilasi lagi, maka Anda terpaksa memperbaiki tes itu juga. Perubahan perilaku kelas seharusnya tidak menjadi masalah. Bahkan, kelas Anda A
seharusnya tidak bergantung pada detail implementasi (yang akan Anda ubah dalam kasus itu). Jadi tes unit A
masih benar, dan mereka memberi tahu Anda bahwa A
berfungsi memberikan implementasi antarmuka yang ideal.