Kelas saya biasanya memiliki sekitar 5-20 metode maksimum, yang menyiratkan bahwa kelas yang memiliki unit test memiliki tentang metode ganda (menghitung dataProviders, setUp, ...)
Saya berpikir untuk memisahkan tes dalam 2-3 kelas, karena meskipun saya mencoba untuk mengikuti prinsip tanggung jawab tunggal, saya lebih suka 2 kelas tes dengan masing-masing 10 metode, daripada satu dengan 20.
Apakah ini praktik yang buruk ?? Apakah bagus untuk memiliki semua tes untuk satu kelas hanya dalam satu, meskipun kelas tes tumbuh secara vertikal?
unit-testing
phpunit
luisandani
sumber
sumber
Jawaban:
Untuk menjawab pertanyaan spesifik, sangat mungkin bahwa pengelompokan tes menjadi beberapa kelas adalah keputusan yang baik, acara ketika kelas yang diuji dirancang dengan baik.
Kode uji unit seperti kode lainnya: harus mengikuti prinsip-prinsip desain yang baik ( KERING , GRASP , CIUMAN , SOLID , YAGNI , dll). Karena logika yang membentuk kode pengujian seringkali lebih sederhana daripada logika domain, banyak poin spesifik tidak akan muncul sebanyak ini, tetapi ingatlah saat menulis semua pengujian Anda.
Ada beberapa prinsip yang terlintas dalam pikiran yang dapat dengan mudah diterapkan ketika memikirkan pertanyaan Anda:
Keterbacaan
Idealnya, begitu ujian ditulis, Anda tidak perlu melihatnya lagi; tetapi hal yang sama dapat dikatakan untuk kode apa pun. Kenyataannya adalah bahwa persyaratan berubah, jadi kami mendapati diri kami membaca kode lebih dari menulisnya. Bahkan ketika melakukan yang terbaik, Anda mungkin menemukan bahwa tes yang Anda tulis tidak cukup memverifikasi apa yang Anda pikirkan, pada titik mana Anda harus kembali dan mencari tahu apa yang salah. Menemukan bahwa metode pengujian dalam kelas metode 40-50 akan menjadi sulit, belum lagi kerumitan penamaan metode tersebut sehingga mereka dapat dibedakan dengan mudah.
Kohesi Tinggi
Setiap kelas tes (seperti kelas lainnya) harus memiliki fokus yang jelas. Jika Anda memiliki banyak kasus uji berbeda untuk metode tertentu dari kelas yang diuji, seperti ketika tes yang diberikan memverifikasi satu hal, letakkan metode uji tersebut di kelas yang terpisah dan beri nama untuk mencerminkan fokusnya.
sumber
Hampir tidak penting bagaimana tes unit Anda diorganisasikan dibandingkan dengan menempatkannya di tempat pertama.
Modul atau kelas kode bisnis adalah sesuatu yang harus Anda pahami sebagai sebuah unit dan dikembangkan lebih lanjut. Itulah alasan utama kami berusaha untuk membuatnya koheren, mudah dipahami secara keseluruhan, dll. Ruang uji hanya kumpulan kasus yang harus dilewati semua; mereka tidak memiliki hubungan khusus satu sama lain . Idealnya, Anda tidak perlu menghadapinya lagi; jika Anda melakukannya biasanya menambahkan lebih banyak tes lagi yang tidak memiliki hubungan khusus dengan tes lain, dan mereka tidak pernah dipanggil oleh kode klien kecuali kerangka unit test.
Oleh karena itu, pertanyaan tentang bagaimana mengatur kelas yang berisi tes unit jauh lebih penting daripada bagaimana mengatur kelas yang membentuk aplikasi Anda sendiri. Anda tidak seharusnya berurusan dengan mereka sebagai struktur makro yang dirancang dengan baik.
sumber
Masukkan tes dalam satu file. Biasanya untuk setiap file kelas saya akan memiliki file tes. Biasanya menambahkan "Tes" ke nama file.
Misalnya, jika ada kelas yang disebut "Foo" akan ada file "FooTests" yang sesuai. Dengan cara ini untuk setiap file kode ada hubungan 1 hingga 1 antara file kode dan file tes.
Ini memberikan konsistensi dan membuatnya lebih mudah bagi pengembang untuk menemukan tes dan tetap memperbaruinya. Tes biasanya dikecualikan dari analisis kode / metrik jadi jika file tersebut besar, itu tidak merusak metrik kesehatan kode keseluruhan, jadi saya tidak menganggap itu bentuk buruk untuk memiliki file tes dengan banyak kode unit test.
sumber
Jika kami mengatakan bahwa definisi praktik buruk dalam pengembangan perangkat lunak adalah apa pun yang tidak membantu Anda mengatasi dan merangkum perubahan, maka saya akan mengatakan tidak menjaga kelas dan tes Anda dalam hubungan satu ke satu adalah praktik yang buruk . Ini adalah bau kode yang mungkin timbul karena hal-hal yang disebutkan di bawah ini.
Jelas ada pengecualian seperti dengan apa pun tetapi hanya perlu diingat saat Anda menulis tes Anda.
Jika salah satu kelas Anda memiliki 20 (atau sedikit kurang) metode semacam itu menunjukkan kepada saya bahwa kelas itu melakukan terlalu banyak di tempat pertama. Di sinilah pengujian unit harus mengisyaratkan Anda bahwa Anda mungkin perlu memecah kelas Anda sedikit lebih dan mendistribusikan tanggung jawab sebelum melanjutkan pengujian.
Sedangkan untuk menjaga mereka di kelas yang sama atau tidak, saya akan menyarankan mencoba untuk menjaga mereka di satu kelas jika memungkinkan karena itu lebih baik dimengerti - koneksi satu ke satu mudah dipahami setelah banyak waktu berlalu. Hanya dari pengalaman.
Jika Anda melihat bahwa tes unit sangat besar bahkan ketika Anda memiliki 5 metode atau kurang maka itu memberitahu saya bahwa kode pengaturan Anda melakukan terlalu banyak atau objek Anda sangat besar .
Jika Anda belum mencoba, lihat pola pembangun untuk membangun objek Anda - ini dapat mengurangi kode secara drastis tentang cara Anda membangun objek Anda sebelum mengujinya. Oleh karena itu membuat kelas tes unit lebih pendek dan lebih sedikit kebutuhan Anda untuk memotongnya menjadi lebih banyak kelas.
sumber