Praktik terbaik selalu memiliki tujuan, alasan di baliknya. Itu selalu merupakan ide yang baik untuk mempertimbangkan alasan-alasan ini dalam desain Anda - terutama ketika Anda mencoba untuk memutuskan bagaimana dan seberapa sulit untuk mengikuti praktik terbaik ini.
Dalam hal ini, alasan utama di balik membuat setiap tes tes menjadi satu hal adalah bahwa jika hal pertama gagal, yang kedua tidak akan diuji. Karena terlalu banyak pembuat opini yang tampaknya menemukan manfaat dalam menghancurkan segala sesuatunya menjadi bit terkecil yang mungkin dan membungkus setiap bit dalam mengasapi sebanyak mungkin, ini melahirkan gagasan bahwa setiap tes harus berisi satu pernyataan.
Jangan ikuti ini secara membabi buta. Bahkan jika setiap tes harus menguji satu hal, Anda masih harus mempertimbangkan untuk menentukan seberapa besar atau kecil setiap "hal" itu, dan untuk melakukannya Anda harus mengingat mengapa Anda ingin setiap tes menguji satu hal - untuk memastikan bug pada hal pertama adalah tidak membiarkan hal kedua tidak teruji.
Jadi, Anda perlu bertanya pada diri sendiri - "apakah saya benar-benar membutuhkan jaminan ini di sini?"
Katakanlah ada bug dalam kasus pengujian pertama - kode respons HTTP tidak 200
. Jadi Anda mulai meretas kode tersebut, mencari tahu mengapa Anda tidak mendapatkan kode respons yang seharusnya Anda miliki, dan memperbaiki masalahnya. Dan sekarang apa?
- Jika Anda menjalankan tes secara manual lagi, untuk memverifikasi bahwa perbaikan Anda memang menyelesaikan masalah, Anda harus mengalami masalah lain yang disembunyikan oleh kegagalan pertama.
- Jika Anda tidak menjalankannya secara manual (mungkin karena terlalu lama?), Dan hanya mendorong perbaikan Anda menunggu server tes otomatis untuk menjalankan semuanya, maka Anda mungkin ingin memasukkan pernyataan berbeda dalam tes yang berbeda. Siklus dalam kasus ini sangat panjang, jadi perlu dilakukan upaya untuk menemukan sebanyak mungkin bug dalam setiap siklus.
Ada beberapa hal yang perlu dipertimbangkan:
Ketergantungan dependensi
Saya tahu tes yang Anda jelaskan hanyalah contoh, dan tes Anda yang sebenarnya mungkin lebih rumit - jadi apa yang akan saya katakan mungkin tidak valid dengan kekuatan sebanyak dalam tes sebenarnya, tetapi mungkin masih agak efektif sehingga Anda mungkin ingin mempertimbangkannya.
Jika Anda memiliki layanan REST (atau protokol HTTP lainnya) yang mengembalikan respons dalam format JSON, Anda biasanya menulis kelas klien sederhana yang memungkinkan Anda menggunakan metode REST seperti metode biasa yang mengembalikan objek biasa. Dengan asumsi bahwa klien memiliki tes terpisah untuk memastikan itu berfungsi, saya akan membuang 3 menegaskan pertama dan hanya menyimpan 4!
Mengapa?
- Penegasan pertama adalah redundan - kelas klien harus memberikan pengecualian jika kode respons HTTP tidak 200.
- Penegasan kedua adalah redundan - jika responsnya kosong, objek hasil akan nol atau representasi lain dari objek kosong, dan Anda tidak akan memiliki tempat untuk meletakkan kunci X.
- Penegasan ketiga berlebihan - jika JSON tidak valid, Anda akan mendapatkan pengecualian saat mencoba menguraikannya.
Jadi Anda tidak perlu menjalankan semua tes ini - jalankan saja tes keempat, dan jika salah satu bug, tiga yang pertama mencoba untuk mendeteksi terjadi tes akan gagal dengan pengecualian yang tepat sebelum Anda bahkan mendapatkan pernyataan yang sebenarnya.
Bagaimana Anda ingin menerima laporan?
Katakanlah Anda tidak mendapatkan email dari server pengujian, tetapi departemen QA yang menjalankan tes dan memberi tahu Anda tentang tes yang gagal.
Jack dari QA mengetuk pintu Anda. Dia mengatakan bahwa metode pengujian pertama gagal, dan metode REST mengembalikan kode respons yang buruk. Anda berterima kasih padanya, dan mulai mencari akar masalahnya.
Kemudian datanglah Jen dari QA, dan katakan bahwa metode pengujian ketiga gagal - metode REST tidak mengembalikan JSON yang valid di badan respons. Anda mengatakan kepadanya bahwa Anda sudah melihat metode itu, dan Anda percaya hal yang sama yang menyebabkannya mengembalikan kode keluar yang buruk juga menyebabkannya mengembalikan sesuatu yang bukan JSON yang valid, dan lebih mirip jejak jejak pengecualian.
Anda kembali bekerja, tetapi kemudian Jim dari QA tiba, mengatakan bahwa metode pengujian keempat gagal dan tidak ada kunci X dalam respons ...
Anda bahkan tidak dapat mencari alasannya karena sulit untuk melihat kode ketika Anda tidak memiliki layar komputer. Jika Jim cukup cepat dia bisa mengelak pada waktunya ...
Email dari server pengujian lebih mudah untuk diberhentikan, tetapi tetap - tidakkah Anda lebih suka diberitahu saja SEKALI ada sesuatu yang salah dengan metode pengujian, dan lihat sendiri log pengujian yang relevan?