Satu masalah yang saya pikir akan saya hadapi dengan pengujian integrasi saya adalah memiliki beberapa tes mengakses database yang sama. Meskipun ini bukan masalah sekarang, saya tahu kami memiliki beberapa aplikasi di sini yang mengakses database yang sama dan saya hanya mencoba memikirkan cara untuk mencegah masalah ini sebelum terjadi.
Sebuah ide yang saya lihat banyak menggunakan transaksi. Dalam memulai Anda memulai transaksi dan kemudian dalam teardown Anda mengembalikan transaksi. Ini berarti bahwa beberapa tes mengakses tabel database yang sama dan tidak akan saling mempengaruhi yang hebat. Masalah yang saya miliki adalah bahwa dalam kasus saya, 85-95% dari tabel yang saya gunakan di MySQL adalah MyISAM yang tidak mendukung transaksi.
Apakah ada cara untuk berkeliling mesin penyimpanan yang tidak mendukung transaksi tetapi masih memungkinkan beberapa tes untuk mengakses tabel yang sama tanpa mereka saling mempengaruhi? Dari apa yang saya dengar, ruby on rails testing framework menggunakan transaksi dengan cara ini, bagaimana mereka mengatasi masalah ini (atau apakah mereka)?
sumber
Jawaban:
Di perusahaan saya, ada perdebatan: ketekunan adalah masalah besar untuk pengujian.
Ada beberapa peretasan yang akan membuat Anda setengah jalan. Kami memutuskan untuk tidak kehilangan waktu bersama mereka:
does
, dan mengujinyaundoes
. Segera setelah pertandingan tidak sempurna, gejalanya tidak jelas, tes mungkin gagal saat beberapa ratus baris kemudian; atau ujian yang seharusnya gagal bisa lulus dengan keliru.Jadi kami pindah ke kebijakan yang kami tahu valid:
sumber
Bahkan jika Anda tidak memiliki "transaksi", dalam pengertian T-SQL, Anda harus tetap berusaha untuk melakukan transaksi Anda (dalam pengertian umum istilah) atom. Tes tidak harus bergantung pada satu sama lain dan harus dapat dibalik. Jika Anda tidak memiliki rollback resmi atau ruang lingkup transaksi, maka Anda mungkin ingin membuatnya sendiri. Misalnya, Anda bisa meminta unit test Anda melakukan pembersihan, di mana mereka menghapus semua catatan yang dibuat dalam tes.
sumber
Hanya memiliki setiap pengguna atau setiap run menimpa database yang digunakan. Itu yang kami lakukan di tempat kerja. Maka Anda tidak pernah memiliki masalah dengan 2 tes simultan yang saling mengganggu.
Kami meminta setiap uji coba membangun db dengan migrasi, mengisi db dengan fiting, dan kemudian merobohkannya kembali di akhir.
Jika DBMS mendukung transaksi, kami menggunakannya sebagai optimisasi untuk pengaturan awal dan pembongkaran. Mereka opsional, meskipun pengujian Anda dapat berjalan agak lama tanpanya. Seperti biasa YYMV.
Tanpa ribut, tidak ada muss.
sumber