Apakah boleh menambahkan pernyataan yang ditangguhkan seperti ini
var actualKittens = actualKittens.Select(kitten => {
Assert.IsСute(kitten);
return kitten
});
Mengapa? Jadi saya bisa mengulangi sekali saja dengan pernyataan yang mengharapkan koleksi terwujud misalnya:
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
Dan juga bisa tidak hanya Pilih tetapi metode dengan iterator didefinisikan dan memiliki banyak pemeriksaan dan logika (misalnya beberapa penghitungan dan penyaringan).
Benih keraguan adalah kerumitan membaca dan men-debug kode tersebut jika gagal uji.
sequence.WithSideEffect(item => Assert.IsCute(item))
untuk membuatnya lebih bersih.expectedKittens
? Anda baru saja menyembunyikan iterasi di balik pemanggilan metode..All()
.Jawaban:
Tidak . Mengapa? Karena jika Anda karena alasan apa pun menghapus yang kedua menegaskan tes akan tetap berubah menjadi hijau dan Anda akan berpikir itu masih berfungsi tetapi tidak karena koleksi tidak akan mendapatkan pencacahan. Jika Anda memiliki dua atau lebih pernyataan independen, mereka akan tetap melakukan pekerjaan mereka meskipun Anda menonaktifkannya.
Pertimbangkan kombinasi ini:
Sekarang bahkan jika Anda menonaktifkan atau menghapus salah satu yang menegaskan yang lain masih akan melakukan tugasnya. Juga jika Anda lupa untuk mematerialisasikan koleksi, mungkin perlu waktu lebih lama untuk menjalankannya tetapi itu masih berfungsi. Tes independen lebih kuat dan andal.
Ada juga no kedua . Saya tidak yakin bagaimana kerangka kerja lain menanganinya tetapi jika Anda menggunakan platform MS Test maka Anda tidak akan tahu tes mana yang gagal. Jika Anda mengklik dua kali tes gagal itu akan menunjukkan kepada Anda
CollectionAssert
sebagai gagal tetapi pada kenyataannya itu adalah sarangAssert
yang salah dan itu akan sangat sulit untuk di-debug. Ini sebuah contoh:Ini berarti bahwa tes pertama sebenarnya tidak berguna karena tidak membantu menemukan bug. Anda tidak tahu apakah itu gagal karena angka tidak valid atau karena kedua koleksi berbeda.
Aku ingin tahu mengapa kamu peduli tentang itu? Ini adalah unit test. Anda tidak harus mengoptimalkan setiap bitnya dan biasanya pengujian tidak memerlukan jutaan item sehingga kinerja tidak perlu menjadi perhatian.
Anda harus mempertahankan tes semacam itu, jadi mengapa Anda harus membuatnya lebih kompleks daripada yang diperlukan? Tulis pernyataan sederhana yang berfungsi.
sumber
ToList
akan mengulangi enumerable, bukan?Assert.Fail
tetapi diCollectionAssert
dan Anda tidak akan bisa mengatakan yang benar-benar salah. Maksud saya VS tidak akan fokusAssert.Fail
tetapi yang lain ... sekarang Anda bisa men-debug.