Saya mengkode tes dalam C # dan saya puas dengan struktur ini:
try
{
// ==========
// ARRANGE
// ==========
// Insert into the database all test data I'll need during the test
// ==========
// ACT
// ==========
// Do what needs to be tested
// ==========
// ASSERT
// ==========
// Check for correct behavior
}
finally
{
// ==========
// CLEANUP
// ==========
// Inverse of ARRANGE, delete the test data inserted during this test
}
Konsepnya adalah "setiap tes membersihkan kekacauan yang terjadi". Namun, beberapa tes meninggalkan database kotor dan gagal tes yang terjadi setelahnya.
Apa cara yang benar untuk melakukan ini? (meminimalkan kesalahan, meminimalkan waktu berjalan)
- Deletes everything» Insert defaults» Insert test data»Jalankan tes?
Insert defaults» Insert test data» Jalankan tes » Delete everything?
Saat ini :
- (per sesi) Deletes everything»Insert defaults
- (per tes) Insert test data»Jalankan tes»Delete test data
Masalah besar dengan database dan (unit) tes adalah bahwa database sangat baik dalam hal-hal yang bertahan.
Solusi yang biasa adalah tidak menggunakan database aktual dalam unit-tes Anda, tetapi malah mengejek database atau menggunakan database di-memori yang dapat dengan mudah dihapus sepenuhnya di antara tes.
Hanya ketika menguji kode yang secara langsung berinteraksi dengan basis data, atau dalam pengujian ujung ke ujung, basis data yang sebenarnya akan digunakan.
sumber
Bekerja pada C # Server dengan SQL Server dan PetaPoco , ini adalah pendekatan yang kami ambil untuk membersihkan data dalam Tes Unit.
Unit test yang khas akan memiliki Setup dan Teardown sebagai berikut:
Di mana PlatformDataObject adalah kelas yang bertanggung jawab untuk berkomunikasi dengan database misalnya melakukan Pilih Sisipkan Perbarui Hapus. Semua tipe * DataObject mewarisi ServerDataObject - kelas dasar memiliki metode untuk membatalkan, memutar kembali atau melakukan transaksi.
Semua tes unit akan memanggil RollbackTransaction (), pada akhirnya akan memanggil IDbTransaction.Rollback ().
Dalam pengujian kami menemukan rutin untuk membuat instance baru dari * * DataObject, membuat beberapa baris menggunakan pernyataan Sisipkan, melakukan tes pada mereka (Memilih, Pembaruan dll ...) dan kemudian memutar kembali.
Kami dapat mengatur satu set data uji sebelum semua tes dijalankan menggunakan SetUpFixture - kelas yang dijalankan sekali sebelum semua tes dijalankan, dan menghapus / mengembalikan data dalam teardown setelah semua tes dijalankan.
sumber