Jangan. Jangan uji unit I / O. Membuang buang waktu saja.
Logika uji unit. Jika ada banyak logika yang ingin Anda uji dalam kode I / O, Anda harus refactor kode Anda untuk memisahkan logika bagaimana Anda I / O dan apa yang saya / O Anda lakukan dari bisnis yang sebenarnya melakukan I / O (yang hampir mustahil untuk diuji).
Untuk sedikit menguraikan, jika Anda ingin menguji server HTTP, Anda harus melakukannya melalui dua jenis tes: tes integrasi dan tes unit. Tes unit tidak boleh berinteraksi dengan I / O sama sekali. Itu lambat dan memperkenalkan banyak kondisi kesalahan yang tidak ada hubungannya dengan kebenaran kode Anda. Tes unit seharusnya tidak tergantung pada kondisi jaringan Anda!
Kode Anda harus terpisah:
- Logika menentukan informasi apa yang akan dikirim
- Logika menentukan byte mana yang akan dikirim untuk mengirim sedikit informasi tertentu (bagaimana cara menyandikan respons, dll. Ke dalam byte mentah), dan
- Mekanisme penulisan byte-byte tersebut ke soket.
Dua yang pertama melibatkan logika dan keputusan dan membutuhkan tes unit. Yang terakhir tidak melibatkan pengambilan banyak jika ada keputusan dan dapat diuji dengan luar biasa menggunakan pengujian integrasi.
Sebenarnya ini hanya desain yang bagus, tetapi salah satu alasannya adalah membuatnya lebih mudah untuk diuji.
Berikut ini beberapa contohnya:
- Jika Anda menulis kode yang mendapatkan data dari basis data relasional, Anda dapat menguji bagaimana Anda memetakan data yang dikembalikan dari kueri relasional ke model aplikasi Anda.
- Jika Anda menulis kode yang menulis data ke database relasional, Anda dapat menguji unit mana dari data yang ingin Anda tulis ke database tanpa benar-benar menguji permintaan SQL tertentu yang Anda gunakan. Misalnya, Anda mungkin menyimpan dua salinan status aplikasi Anda dalam memori: salinan yang mewakili seperti apa database dan copy pekerjaan. Saat Anda ingin menyinkronkan ke basis data, Anda perlu membuatnya berbeda dan menulis perbedaannya ke basis data. Anda dapat dengan mudah menguji unit kode diff itu.
- Jika Anda menulis kode yang membaca sesuatu dari file konfigurasi, Anda ingin menguji parser format file konfigurasi Anda, tetapi dengan string dari file sumber tes Anda daripada string yang Anda dapatkan dari disk.