MSTEST0038:請勿搭配實值型別使用 'Assert.AreSame' 或 'Assert.AreNotSame'
財產 | 價值 |
---|---|
規則標識碼 | MSTEST0038 |
標題 | 請勿使用 『Assert.AreSame』 或 'Assert.AreNotSame' 搭配實值類型 |
類別 | 用法 |
修正是造成問題還是未造成問題 | 不間斷 |
預設啟用 | 是的 |
預設嚴重性 | 警告 |
在版本 中引進 | 3.8.0 |
是否有程式碼修正 | 是的 |
原因
使用 Assert.AreSame 或 Assert.AreNotSame,其中一或兩個引數都是值類型。
規則描述
藉由 Assert.AreSame比較給定的 Assert.AreNotSameexpected
的 / 和實際參數,notExpected
和 ReferenceEquals
工作。 因此,當您傳遞實值型別時,它會被 封箱。
如果使用 AreSame
,則斷言將總是失敗。 如果使用 AreNotSame
,則斷言一律會通過。
針對 AreSame
,判斷提示傳遞的唯一案例是,如果兩個自變數都是可為 Null 的實值型別,其值都是 Null。 在此情況下,有兩個不同的 Assert.IsNull
呼叫更清楚。
如何修正違規
使用 Assert.AreEqual
與 Assert.AreNotEqual
,而不是使用 Assert.AreSame
與 Assert.AreNotSame
。
如果使用 Assert.AreSame
,而且這兩個自變數都是可為 Null 的實值型別,其值必須是 null,則根據測試意圖而定,兩個不同的 Assert.IsNull
呼叫可能比 AreEqual
更合適。
隱藏警告的時機
請勿隱藏此規則的警告。 忽略此規則將導致斷言一律失敗或一律通過。