Apakah boleh menambahkan pernyataan yang ditangguhkan seperti ini [..]
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:
Assert.IsTrue(actualKittens.All(x => x.IsCute());
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
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 sarang Assert
yang salah dan itu akan sangat sulit untuk di-debug. Ini sebuah contoh:
[TestMethod]
public void TestMethod()
{
var numbers = new[] { 1, 2, 3 }.Select(x =>
{
Assert.Fail("Wrong number.");
return x;
});
// This will fail and you won't be sure why.
CollectionAssert.AreEqual(new[] { 1, 2, 3 }, numbers.ToList());
}
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.
Mengapa? Jadi saya bisa mengulanginya sekali saja dengan pernyataan yang mengharapkan koleksi terwujud
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.
sequence.WithSideEffect(item => Assert.IsCute(item))
untuk membuatnya lebih bersih.