Selama beberapa minggu terakhir saya telah merenungkan dan meneliti bagaimana mengisi celah dalam metodologi pengujian kami. Secara sederhana tes unit terlalu kecil dan tes integrasi tradisional terlalu besar.
Skenario yang sering muncul di mana A
dan B
keduanya menggunakan komponen C
. Namun A
dan B
memiliki persyaratan yang sedikit berbeda untuk, dan membuat asumsi yang sedikit berbeda C
. Jika saya adalah pengembang tentang A
bagaimana dan di mana saya menguji asumsi saya C
?
Jelas pengujian unit A
dengan asumsi yang diejek tentang C
itu baik untuk pengujian A
secara terpisah, tetapi itu tidak menguji asumsi itu sendiri.
Kemungkinan lain adalah menambahkan unit test untuk C
. Namun ini tidak ideal karena, sementara A
dalam pengembangan, mengubah tes C
dengan asumsi yang berkembang dari A
akan terlalu canggung. Memang A
pengembang bahkan mungkin tidak memiliki akses yang memadai ke tes unit C
(misalnya perpustakaan eksternal).
Untuk membingkai ini dengan contoh yang lebih konkret: Asumsikan bahwa ini adalah aplikasi simpul. A
, dan B
bergantung pada C
untuk membaca file (antara lain) dan menyimpan konten file dalam objek yang diteruskan C
. Pada awalnya semua file yang C
menangani berukuran kecil dan dapat dibaca secara serempak tanpa pemblokiran yang signifikan. Namun pengembang B
menyadari bahwa file-nya semakin besar dan perlu beralih C
ke async read. Ini menghasilkan bug sinkronisasi sporadis A
, yang masih berasumsi C
sedang membaca file secara sinkron.
Ini adalah jenis bug yang terkenal sulit dilacak dari tes integrasi penuh, dan mungkin tidak terperangkap dalam tes integrasi sama sekali. Ini juga tidak ditangkap oleh A
unit test karena A
asumsi itu diejek. Namun itu bisa dengan mudah ditangkap oleh tes integrasi "mini" yang latihan adil A
dan C
.
Saya hanya menemukan beberapa referensi untuk jenis pengujian ini. Integrasi dalam Kecil , Komponen Integrasi Pengujian , Satuan Integrasi Testing. Ini juga berhubungan dengan arah pengujian BDD daripada pengujian unit TDD formal.
Bagaimana cara saya mengisi celah pengujian ini? Khususnya - di mana saya bisa melakukan tes semacam itu? Bagaimana cara mengejek input A
dan C
untuk tes integrasi "mini"? Dan berapa banyak upaya yang harus dilakukan untuk memisahkan masalah pengujian antara tes ini dan tes unit? Atau ada cara yang lebih baik untuk mengisi celah pengujian?