Penafsiran saya tentang pembicaraan itu adalah:
- komponen uji, bukan kelas.
- menguji komponen melalui port antarmuka mereka.
Itu tidak disebutkan dalam pembicaraan, tetapi saya pikir konteks yang diasumsikan untuk saran adalah sesuatu seperti:
- Anda sedang mengembangkan sistem untuk pengguna, bukan, katakanlah, perpustakaan atau kerangka kerja utilitas.
- tujuan pengujian adalah untuk berhasil memberikan sebanyak mungkin dalam anggaran kompetitif.
- komponen ditulis dalam bahasa tunggal, dewasa, mungkin diketik secara statis, seperti C # / Java.
- komponen adalah urutan 10.000-50000 garis; proyek Maven atau VS, plugin OSGI, dll.
- komponen ditulis oleh pengembang tunggal, atau tim yang terintegrasi erat.
- Anda mengikuti terminologi dan pendekatan sesuatu seperti arsitektur heksagonal
- port komponen adalah tempat Anda meninggalkan bahasa lokal, dan sistem tipenya, di belakang, beralih ke http / SQL / XML / byte / ...
- membungkus setiap port adalah antarmuka yang diketik, dalam arti Java / C #, yang dapat mengimplementasikan implementasinya untuk beralih teknologi.
Jadi pengujian komponen adalah ruang lingkup terbesar yang mungkin di mana sesuatu masih bisa disebut unit testing. Ini agak berbeda dengan bagaimana beberapa orang, terutama akademisi, menggunakan istilah ini. Ini tidak seperti contoh dalam tutorial alat uji unit tipikal. Namun, itu cocok dengan asalnya dalam pengujian perangkat keras; papan dan modul adalah unit yang diuji, bukan kabel dan sekrup. Atau setidaknya Anda tidak membuat Boeing tiruan untuk menguji sekrup ...
Mengekstrapolasi dari itu, dan memasukkan beberapa pemikiran saya sendiri,
- Setiap antarmuka akan berupa input, output, atau kolaborator (seperti database).
- Anda menguji antarmuka input; panggil metode, nyatakan nilai kembali.
- Anda mengejek antarmuka output; memverifikasi metode yang diharapkan dipanggil untuk test case yang diberikan.
- Anda memalsukan kolaborator; memberikan implementasi yang sederhana namun berfungsi
Jika Anda melakukannya dengan benar dan bersih, Anda hampir tidak memerlukan alat mengejek; itu hanya digunakan beberapa kali per sistem.
Database umumnya kolaborator, sehingga dipalsukan daripada diejek. Ini akan menyakitkan untuk diterapkan dengan tangan; Untungnya hal-hal seperti itu sudah ada .
Pola pengujian dasar adalah melakukan beberapa urutan operasi (mis. Menyimpan dan memuat kembali dokumen); konfirmasi itu berfungsi. Ini sama dengan skenario pengujian lainnya; tidak ada perubahan implementasi (yang berfungsi) yang kemungkinan menyebabkan tes seperti itu gagal.
Pengecualian adalah di mana catatan database ditulis tetapi tidak pernah dibaca oleh sistem yang diuji; mis. log audit atau sejenisnya. Ini adalah output, dan karenanya harus diejek. Pola pengujian adalah melakukan beberapa urutan operasi; konfirmasi antarmuka audit dipanggil dengan metode dan argumen sebagaimana ditentukan.
Perhatikan bahwa bahkan di sini, asalkan Anda menggunakan alat mengejek tipe-aman seperti mockito , mengganti nama metode antarmuka tidak dapat menyebabkan kegagalan pengujian. Jika Anda menggunakan IDE dengan tes yang dimuat, itu akan menjadi refactored bersama dengan metode rename. Jika tidak, tes tidak akan dikompilasi.