Secara umum
Kapan Anda memiliki cukup pengujian otomatis untuk percaya diri dalam pipa integrasi berkelanjutan Anda?
Jawabannya mungkin menjadi jelas jika Anda memikirkan apa yang ingin Anda yakini. Pada akhirnya, ia memetakan 1-1; setiap tes membuat Anda yakin tentang satu hal yang diuji:
- Pengujian unit memberi Anda kepercayaan diri bahwa kelas (atau modul) melakukan apa yang diuji.
- Pengujian integrasi memberi Anda kepercayaan diri bahwa beberapa unit bekerja bersama dalam cara yang diuji.
- Pengujian ujung ke ujung memberi Anda keyakinan bahwa seluruh aplikasi melakukan hal tertentu, seperti yang dijelaskan dalam tes.
Dari cara Anda merumuskan pertanyaan, Anda mungkin berpikir dalam pengertian bisnis gambaran besar sekarang, misalnya:
Saya ingin yakin bahwa aplikasi saya bisa melakukan X .
Jadi, Anda menulis tes ujung ke ujung yang mencoba melakukan X dan memeriksa apakah melakukan itu dengan benar.
Lebih konkret
Itu semua sangat merujuk pada diri sendiri, tapi itu karena itu yang terjadi. Tidak ada yang lebih dari itu.
Misalnya, bayangkan Anda menulis aplikasi untuk membuat resep memasak. Salah satu fitur adalah bahwa, jika Anda menambahkan jumlah yang berbeda dari beberapa jenis keju yang berbeda, itu memberi Anda suhu dan waktu yang tepat sehingga semuanya mencair.
Jadi Anda dapat menulis unit test untuk Anda CheeseMeltCalculator
, di mana Anda memberikan 100 g Gouda dan 200 g keju Emmental, dan kemudian Anda memeriksa bahwa suhu dan waktu berubah dengan benar. Itu berarti Anda sekarang dapat yakin bahwa itu CheeseMeltCalculator
bekerja untuk 100g Gouda dan keju 200g. Sekarang jika Anda mengulangi tes ini dengan 300g Gouda, bukan 200g, Anda bisa cukup percaya diri bahwa itu bekerja dengan benar untuk nilai yang berbeda. Anda dapat menambahkan tes untuk 0
, -1
dan int.MaxValue
g dari Gouda untuk yakin bahwa kode tidak naik (atau naik dengan benar seperti yang dimaksudkan) untuk input aneh.
Anda dapat menulis tes integrasi untuk memeriksa yang CheeseMeltCalculator
dimasukkan dengan benar ke dalam seluruh suhu makanan dan proses perhitungan waktu. Jika ini salah, tetapi CheeseMeltCalculator
tes di atas baik-baik saja, Anda dapat yakin bahwa bug ada di kalkulator lain atau cara data dari kalkulator berbeda digabungkan.
Dan akhirnya Anda dapat menulis tes ujung ke ujung untuk membuat seluruh resep, dan salah satu hal yang Anda periksa adalah suhu dan waktu hasil. Jika 2 level tes sebelumnya baik-baik saja, tetapi ini tidak beres, maka Anda dapat kembali yakin bahwa bagian-bagian itu benar dan kesalahannya adalah sesuatu tentang bagaimana perhitungan suhu diintegrasikan ke dalam aplikasi. Misalnya, mungkin input pengguna tidak ditransfer dengan benar.
Dan akhirnya , jika semua tes itu baik-baik saja, maka Anda dapat yakin bahwa " jika Anda menambahkan jumlah yang berbeda dari beberapa jenis keju yang berbeda, itu memberi Anda suhu dan waktu yang tepat sehingga semuanya mencair "
Cerpen Panjang
Intinya adalah Anda tidak dapat melakukan tes "itu berfungsi dengan benar". Anda hanya dapat menguji "Jika saya melakukan X, Y terjadi".
Namun, ini persis hal yang harus dalam spesifikasi teknis untuk proyek tersebut. Pernyataan seperti " jika Anda menambahkan jumlah yang berbeda dari beberapa jenis keju yang berbeda, itu memberi Anda suhu dan waktu yang tepat sehingga semuanya mencair " tidak hanya memberi harapan yang jelas kepada klien tentang apa yang akan dilakukan produk jadi, tetapi juga dapat diubah dalam tes otomatis.
informasi tambahan
Pengguna Richard menambahkan info ini dalam edit:
Martin Fowler memiliki ringkasan yang sangat bagus di situs webnya tentang strategi paling umum: https://martinfowler.com/articles/microservice-testing/
Saya tidak ingin menghapus ini, tetapi saya ingin mengatakan ini: Dibandingkan dengan jawaban ini, ini bukan "ringkasan", melainkan penjelasan yang jauh lebih mendalam, dengan grafik yang bagus dan segalanya.
Saran saya adalah: Jika semuanya masuk akal bagi Anda setelah membaca jawaban saya, Anda sudah selesai. Jika masih tampak tidak jelas, sisihkan sedikit waktu dan bacalah artikel yang tertaut.