Saya memiliki tes suite tes yang berjalan seperti ini:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Tes ini berfungsi seperti yang saya harapkan, tetapi ketika saya menjalankannya xUnit mencetak peringatan:
peringatan xUnit2013: Jangan gunakan Assert.Equal () untuk memeriksa ukuran koleksi.
Namun, tidak ada alternatif yang disarankan dalam peringatan tersebut, dan pencarian Google membawa saya ke kode sumber di xUnit untuk pengujian yang memverifikasi peringatan ini dicetak.
Jika Assert.Equal()
bukan cara yang tepat untuk memverifikasi panjang koleksi, apakah itu?
Untuk memperjelas: Saya menyadari bahwa saya bisa "menipu" xUnit agar tidak mengeluarkan peringatan ini dengan misalnya mengekstrak variabel atau menggunakan Assert.True(stuff.Count() == 1)
sebagai gantinya. Yang terakhir hanya hacky, dan yang pertama terasa seperti jika xUnit misalnya mencoba menghindari beberapa iterasi IEnumerable<T>
, maka ini adalah cara yang salah (karena saya akan mendapatkan petunjuk kompiler tentang itu secara terpisah jika itu adalah masalah), dan xUnit itu sendiri seharusnya tidak pernah mengevaluasi input lebih dari sekali (pada kenyataannya mungkin akan mendapatkan input yang sama terlepas dari ekstraksi variabel, karena cara kerja pemanggilan fungsi C #).
Jadi, saya tidak hanya tertarik untuk menghapus peringatan itu dari keluaran saya. Jawaban atas pertanyaan saya juga menjelaskan mengapa peringatan itu disertakan di perpustakaan sejak awal dan mengapa pendekatan apa pun yang harus saya gunakan lebih baik.
stuffCollection.Count()
dalam variabel terpisah dan meneruskannya ke pernyataan apakah itu memberi Anda kesalahan yang sama?Jawaban:
Xunit menawarkan perbaikan cepat untuk sebagian besar peringatannya, jadi Anda harus dapat melihat apa yang menurutnya "benar".
Dalam kasus Anda, itu ingin Anda gunakan
Assert.Single
karena Anda mengharapkan tepat satu item. Jika Anda menggunakan nomor arbitrer, seperti 412, maka tidak akan ada peringatan tentang penggunaanCount
. Ini hanya akan menyarankan penggunaanSingle
jika Anda mengharapkan satu item, atauEmpty
jika Anda mengharapkan tidak ada item.sumber
Empty
,Single
danNotEmpty
- jika Anda mengharapkan nilai dinamis xUnit2013 tidak boleh memicu.Saya menemukan ini memberi saya kesalahan yang sama:
Dan mentransmisikannya menghentikan kemunculan kesalahan.
sumber
Untuk elemen tunggal dalam daftar, sebaiknya gunakan ini sebagai gantinya:
Assert.Single(resultList);
sumber
Saya memiliki masalah yang sama ketika saya menggunakan properti Hitung seperti di bawah ini di xUnit.
Setelah, saya menggunakan fungsi Count () pada pengumpulan, itu memperbaiki masalah saya.
sumber