Di tempat kerja, salah satu proyek saya kebanyakan tentang mengambil data yang diteruskan dari klien eksternal dan bertahan dalam database. Ini adalah aplikasi Java enterprise yang menggunakan JPA dan sebagian besar logika kami berkisar pada operasi CRUD.
Mayoritas bug kami melibatkan JPA dengan satu atau lain cara.
- Contoh 1: Jika Anda mengklik tombol simpan dua kali, JPA mungkin mencoba memasukkan entitas yang sama ke dalam database untuk kedua kalinya, menyebabkan pelanggaran kunci primer.
- Contoh 2: Anda mengambil entitas dari database, mengeditnya dan mencoba memperbarui datanya. JPA dapat mencoba membuat instance baru alih-alih memperbarui yang lama.
Seringkali solusinya perlu menambah / menghapus / mengubah anotasi JPA. Lain waktu ada hubungannya dengan memodifikasi logika DAO.
Saya tidak tahu bagaimana cara mendapatkan kepercayaan pada kode kami menggunakan unit test dan TDD. Saya tidak yakin apakah itu karena unit test dan TDD cocok, atau jika saya mendekati masalahnya salah.
Tes unit sepertinya tidak cocok karena saya hanya dapat menemukan masalah ini saat runtime dan saya perlu menggunakan server aplikasi untuk mereproduksi masalah. Biasanya database perlu dilibatkan yang saya anggap berada di luar definisi uji unit: Ini adalah tes integrasi.
TDD sepertinya kurang pas karena putaran + tes umpan balik sangat lambat sehingga membuat saya sangat tidak produktif. Putaran umpan balik penerapan + pengujian membutuhkan waktu lebih dari 3 menit, dan itu hanya jika saya menjalankan tes secara khusus tentang kode yang saya tulis. Untuk menjalankan semua tes integrasi, dibutuhkan 30+ menit.
Ada kode di luar cetakan ini dan saya selalu menguji unit kapan pun saya bisa. Tetapi sebagian besar bug kami dan time sink terbesar selalu melibatkan JPA atau database.
Ada pertanyaan lain yang serupa , tetapi jika saya mengikuti saran saya akan membungkus bagian yang paling tidak stabil dari kode saya (JPA) dan menguji semuanya kecuali itu. Dalam konteks pertanyaan saya, saya akan berada dalam situasi buruk yang sama. Apa langkah selanjutnya setelah membungkus JPA? IMO pertanyaan itu (mungkin) langkah untuk menjawab pertanyaan saya, tetapi bukan jawaban untuk itu.
unit testing != TDD
)