10 detik adalah waktu yang sangat lama untuk menjalankan satu pengujian. Naluri saya adalah bahwa target spesifikasi Anda menjalankan pengujian unit dan integrasi pada saat yang bersamaan. Ini adalah hal yang umum terjadi pada proyek dan pada tahap tertentu, Anda perlu mengatasi hutang teknis ini jika Anda ingin menghasilkan lebih banyak, lebih cepat. Ada sejumlah strategi yang dapat membantu Anda melakukan ini ... dan saya akan merekomendasikan beberapa strategi yang telah saya gunakan di masa lalu.
1. Unit Terpisah Dari Tes Integrasi
Hal pertama yang akan saya lakukan adalah memisahkan unit dari tes integrasi. Anda dapat melakukannya dengan:
- Memindahkannya (ke folder terpisah di bawah direktori spesifikasi) - dan memodifikasi target rake
- Memberi tag pada mereka (rspec memungkinkan Anda menandai pengujian Anda)
Filosofinya adalah, Anda ingin bangunan reguler Anda cepat - jika tidak, orang tidak akan terlalu senang untuk sering menjalankannya. Jadi kembalilah ke wilayah itu. Jalankan pengujian reguler Anda dengan cepat, dan gunakan server integrasi berkelanjutan untuk menjalankan build yang lebih lengkap.
Tes integrasi adalah tes yang melibatkan dependensi eksternal (misalnya Database, WebService, Queue, dan beberapa orang akan membantah FileSystem). Tes unit hanya menguji item kode tertentu yang ingin Anda periksa. Ini harus berjalan cepat (9000 dalam 45 detik dimungkinkan), yaitu sebagian besar harus berjalan di memori.
2. Ubah Tes Integrasi Menjadi Tes Unit
Jika sebagian besar pengujian unit Anda lebih kecil dari rangkaian pengujian integrasi, Anda mengalami masalah. Artinya, ketidakkonsistenan akan mulai terlihat dengan lebih mudah. Jadi dari sini, mulailah membuat lebih banyak pengujian unit untuk menggantikan pengujian integrasi. Hal-hal yang dapat Anda lakukan untuk membantu dalam proses ini adalah:
- Gunakan kerangka kerja tiruan, bukan sumber daya sebenarnya. Rspec memiliki kerangka kerja tiruan bawaan.
- Jalankan rcov di rangkaian pengujian unit Anda. Gunakan itu untuk mengukur seberapa menyeluruh rangkaian pengujian unit Anda.
Setelah Anda memiliki pengujian unit yang tepat untuk menggantikan pengujian integrasi - hapus pengujian integrasi. Pengujian duplikat hanya memperburuk pemeliharaan.
3. Jangan Gunakan Perlengkapan
Perlengkapan itu jahat. Gunakan pabrik sebagai gantinya (masinis atau bot pabrik). Sistem ini dapat membuat grafik data yang lebih mudah beradaptasi, dan yang lebih penting, mereka dapat membuat objek dalam memori yang dapat Anda gunakan, daripada memuat sesuatu dari sumber data eksternal.
4. Tambahkan Cek Untuk Menghentikan Tes Unit Menjadi Tes Integrasi
Sekarang setelah Anda memiliki pengujian yang lebih cepat, saatnya untuk melakukan pemeriksaan agar BERHENTI ini terjadi lagi.
Ada perpustakaan yang catatan aktif patch monyet melempar kesalahan ketika mencoba mengakses database (UnitRecord).
Anda juga dapat mencoba memasangkan dan TDD yang dapat membantu memaksa tim Anda menulis tes lebih cepat karena:
- Seseorang sedang memeriksa - jadi tidak ada yang malas
- TDD yang tepat membutuhkan umpan balik yang cepat. Tes yang lambat hanya membuat semuanya menyakitkan.
5. Gunakan Perpustakaan Lain Untuk Mengatasi Masalah
Seseorang menyebutkan spork (mempercepat waktu muat untuk rangkaian pengujian di bawah rails3), hydra / parallel_tests - untuk menjalankan pengujian unit secara paralel (di beberapa inti).
Ini mungkin harus digunakan TERAKHIR. Masalah Anda yang sebenarnya ada di langkah 1, 2, 3. Selesaikan itu dan Anda akan berada dalam posisi yang lebih baik untuk menggunakan infrastruktur tambahan.