Integrasi vs. tes unit
Anda harus menjaga tes unit Anda dan tes integrasi Anda sepenuhnya terpisah Unit test Anda harus menguji satu hal dan satu hal saja dan dalam isolasi lengkap dari sisa sistem Anda. Unit didefinisikan secara longgar tetapi biasanya bermuara pada suatu metode atau fungsi.
Masuk akal untuk memiliki tes untuk setiap unit sehingga Anda tahu algoritma mereka diterapkan dengan benar dan Anda segera tahu apa yang salah di mana, jika implementasi cacat.
Karena Anda menguji dalam isolasi lengkap saat pengujian unit, Anda menggunakan objek rintisan dan tiruan untuk berperilaku seperti aplikasi lainnya. Di sinilah tes integrasi masuk. Menguji semua unit dalam isolasi itu bagus tetapi Anda perlu tahu apakah unit tersebut benar-benar bekerja bersama.
Ini berarti mengetahui apakah suatu model benar-benar disimpan dalam database atau jika peringatan benar-benar dikeluarkan setelah algoritma X gagal.
Pengembangan yang digerakkan oleh tes
Mengambil langkah mundur dan melihat Test Driven Development (TDD) ada beberapa hal yang perlu dipertimbangkan.
- Anda menulis unit test Anda sebelum Anda benar-benar menulis kode yang membuatnya lulus.
- Anda berhasil lulus ujian, tulis kode yang cukup untuk menyelesaikannya.
- Sekarang setelah tes berlalu, saatnya untuk mengambil langkah mundur. Apakah ada sesuatu untuk diperbaiki dengan fungsionalitas baru ini? Anda dapat melakukan ini dengan aman karena semuanya tercakup oleh tes.
Integrasi dulu vs Integrasi lalu
Tes integrasi masuk ke dalam siklus TDD ini dalam salah satu dari dua cara. Saya tahu orang-orang yang suka menulisnya sebelumnya. Mereka menyebut tes integrasi tes end-to-end dan mendefinisikan tes ujung ke ujung sebagai tes yang benar-benar menguji seluruh jalur usecase (pikirkan untuk menyiapkan aplikasi, bootstrap, pergi ke controller, menjalankannya, memeriksa hasil, keluaran, dll ...). Kemudian mereka mulai dengan tes unit pertama mereka, membuatnya lulus, menambahkan kedua, membuatnya lulus, dll ... Perlahan-lahan semakin banyak bagian dari lulus uji integrasi juga hingga fitur selesai.
Gaya lainnya adalah membangun uji unit fitur dengan uji unit dan menambahkan tes integrasi yang dianggap perlu sesudahnya. Perbedaan besar antara keduanya adalah bahwa dalam hal uji integrasi terlebih dahulu Anda harus memikirkan desain aplikasi. Jenis ini tidak setuju dengan premis bahwa TDD adalah tentang desain aplikasi dan juga tentang pengujian.
Kepraktisan
Di pekerjaan saya, kami memiliki semua tes kami di proyek yang sama. Namun ada beberapa kelompok berbeda. Alat integrasi berkelanjutan menjalankan apa yang ditandai sebagai unit test terlebih dahulu. Hanya jika yang berhasil adalah pengujian integrasi yang lebih lambat (karena mereka membuat permintaan nyata, menggunakan database nyata, dll) juga dijalankan.
Kami biasanya menggunakan satu file tes untuk satu kelas.
Bacaan yang disarankan
- Menumbuhkan perangkat lunak berorientasi objek, dipandu oleh tes-tes Buku ini adalah contoh yang sangat bagus dari metodologi uji integrasi pertama
- Seni pengujian unit, dengan contoh di dot.net Pada pengujian unit, dengan contoh di dot.net: D Buku yang sangat bagus tentang prinsip-prinsip di balik pengujian unit.
- Robert C. Martin di TDD (Artikel gratis): Bacalah dua artikel pertama yang dia tautkan di sana juga.