Pertama-tama, ada bug dalam implementasi Anda. Jika kueri salah, transaksi saat ini secara otomatis dibatalkan dan kemudian ditutup. Jadi saat Anda terus menjalankan kueri, kueri tersebut tidak akan berada dalam transaksi (mereka akan dikomit ke DB). Kemudian, ketika Anda menjalankan Rollback
, itu diam-diam akan gagal. Dari dokumen MySQL
:
Rolling back can be a slow operation that may occur implicitly without the user
having explicitly asked for it (for example, when an error occurs).
Perintah eksplisit ROLLBACK
hanya boleh digunakan jika Anda menentukan dalam aplikasi bahwa Anda perlu melakukan rollback (untuk alasan selain kesalahan kueri). Misalnya, jika Anda mengurangi dana dari sebuah akun, Anda akan secara eksplisit melakukan rollback jika Anda mengetahui bahwa pengguna tidak memiliki cukup dana untuk menyelesaikan pertukaran...
Sejauh menguji transaksi, saya menyalin database. Saya membuat database baru dan menginstal satu set "data dummy". Kemudian saya menjalankan semua tes menggunakan alat otomatis. Alat ini benar-benar akan melakukan transaksi dan memaksa rollback, dan memeriksa apakah status basis data yang diharapkan dipertahankan selama pengujian. Karena lebih sulit untuk mengetahui status akhir dari transaksi secara terprogram jika Anda memiliki input yang tidak diketahui ke transaksi, menguji data langsung (atau bahkan disalin dari langsung) tidak akan mudah. Anda dapat melakukannya (dan harus), tetapi jangan bergantung pada hasil tersebut untuk menentukan apakah sistem Anda berfungsi. Gunakan hasil tersebut untuk membuat kasus pengujian baru untuk penguji otomatis...