Setelah bekerja dengan pengecualian di Jawa dan .NET DAN setelah membaca banyak artikel tentang bagaimana / kapan / mengapa menangkap pengecualian, saya akhirnya menemukan langkah-langkah berikut yang saya lalui di kepala setiap kali saya melihat potensi pengecualian terjadi, atau pengecualian saya harus menangkap (Jawa) ... bahkan jika itu tidak pernah terjadi (menghela napas ...). Dan sepertinya itu berfungsi, setidaknya untuk saya:
- Apakah ada yang berguna yang bisa saya lakukan dengan pengecualian itu, (kecuali logging)? Jika jawabannya ya, tulis kode solusinya, dan jika solusinya dapat memberikan pengecualian, buka 2:
- Bungkus pengecualian di sekitar pengecualian runtime, buang, pergi ke 3.
- Di kelas tingkat yang lebih tinggi di mana kemungkinan basis data / proses transaksi telah dimulai, tangkap pengecualian, kembalikan transaksi, rethrow pengecualian.
- Di kelas tingkat atas (yang mungkin merupakan tempat di mana transaksi telah dimulai), catat pengecualian menggunakan kerangka kerja logging seperti slf4j (ditambah dengan log4j misalnya), atau log4net . Jika memungkinkan, kirim langsung email pengecualian ke daftar distribusi yang terdiri dari pengembang aplikasi.
- Jika ada GUI, tampilkan pesan kesalahan yang menunjukkan dengan cara yang paling ramah pengguna apa yang menyebabkan masalah; tidak menampilkan exception / stacktrace, pengguna tidak peduli dan tidak perlu tahu itu adalah NullPointerException.
Saya juga harus menambahkan langkah 0 , di mana saya sengaja melemparkan apa yang saya sebut pengecualian "bisnis" (pengecualian baru yang saya buat dengan memperluas kelas "Pengecualian") ketika beberapa perawatan kompleks tidak dapat dieksekusi karena kesalahan data, TAPI itu diketahui terjadi karena telah diidentifikasi sebagai kasus pengecualian selama analisis.
Kecuali untuk bagian logging, saya sepenuhnya setuju dengan poin yang ditulis oleh "mikera"; Saya hanya akan menambahkan bahwa pengecualian harus dicatat sekali saja.
Juga, langkah-langkah yang saya daftarkan mungkin berbeda jika apa yang Anda tulis adalah API / Framework . Di sana, melemparkan pengecualian yang dirancang dengan baik adalah wajib untuk membantu pengembang memahami kesalahan mereka.
Sedangkan untuk menguji pengecualian, menggunakan objek tiruan Anda harus dapat menguji hampir semuanya, baik itu pengecualian-al atau tidak, asalkan kelas Anda menghormati praktik terbaik "satu kelas untuk melakukan satu hal". Saya juga secara pribadi memastikan untuk menandai metode yang paling penting tetapi tersembunyi sebagai "dilindungi" daripada "pribadi" sehingga saya dapat mengujinya tanpa terlalu banyak kesulitan. Terlepas dari itu, menguji pengecualian adalah sederhana, hanya memprovokasi pengecualian dan "mengharapkan" pengecualian terjadi dengan menangkapnya. Jika Anda tidak mendapatkan pengecualian, maka Anda memiliki kesalahan unit test case.