MSTEST0038: Jangan gunakan 'Assert.AreSame' atau 'Assert.AreNotSame' dengan tipe nilai
Harta benda | Nilai |
---|---|
ID Aturan | MSTEST0038 |
Judul | Jangan gunakan 'Assert.AreSame' atau 'Assert.AreNotSame' dengan jenis nilai |
Kategori | Penggunaan |
Perbaikan dapat berdampak atau tidak berdampak | Tidak melanggar |
Diaktifkan secara default | Ya |
tingkat keparahan default | Peringatan |
Diperkenalkan dalam versi | 3.8.0 |
Apakah ada perbaikan kode | Ya |
Sebab
Penggunaan Assert.AreSame atau Assert.AreNotSame dengan satu atau kedua argumen menjadi jenis nilai.
Deskripsi aturan
Assert.AreSame dan Assert.AreNotSame bekerja dengan membandingkan referensi dari expected
/notExpected
dan argumen yang sebenarnya diberikan melalui ReferenceEquals
. Oleh karena itu, ketika Anda meneruskan jenis nilai, itu kotak.
Jika menggunakan AreSame
, assert itu akan selalu gagal. Jika menggunakan AreNotSame
, pernyataan akan selalu berlalu.
Untuk AreSame
, satu-satunya kasus ketika pernyataan lolos adalah jika kedua argumen adalah jenis nilai nullable yang nilainya keduanya null. Dalam hal ini, lebih jelas jika memiliki dua panggilan Assert.IsNull
terpisah.
Cara memperbaiki pelanggaran
Gunakan Assert.AreEqual
dan Assert.AreNotEqual
alih-alih Assert.AreSame
dan Assert.AreNotSame
.
Jika menggunakan Assert.AreSame
dan kedua argumen adalah tipe nilai nullable yang diharapkan bernilai null, maka dua panggilan terpisah terhadap Assert.IsNull
mungkin lebih tepat daripada AreEqual
, tergantung pada tujuan pengujian.
Kapan harus menekan peringatan
Jangan mengabaikan peringatan dari aturan ini. Mengabaikan aturan ini akan menghasilkan pernyataan yang akan selalu gagal atau selalu lulus.