2009-01-28 67 views

回答

21

。等式從對象繼承。它被列爲「不要使用此方法」,因此用戶不會將其與AreEqual方法混淆。

+0

請注意```CollectionAssert``具有暴露``Object.Equals``的缺陷。與``Assert``不同,`````````````'`'```````````不會重新定義該方法,所以當您運行包含``Assert.Equals``的測試運行測試時, – vvnurmi 2017-05-11 11:17:48

4

.NET中的所有對象都從Object派生。

Object有一個.Equals()方法。

顯然,這個特定對象的.Equals()方法沒有做任何有用的事情,所以文檔警告你它沒有做任何有用的事情。

1

它在2008年(也許是SP1)被更改爲通過測試時失敗,以致偶然使用它的人被告知他們真的不應該使用它。

1

Assert.Equals,就像它基於類的方法Object.Equals一樣,對比較對象是非常有用的。但是,這兩種方法都不適用於獨立檢測和報告或單元測試中的錯誤,因爲如果值不相等,Object.Equals將返回布爾值而不是拋出。這是,如果在單元測試中使用這樣的問題:

Assert.Equals(42, ComputeMeaningOfLife()); 

除了可能的運行時間太長:-)這個單元測試的問題,這個測試將默認繼續即使計算方法提供了錯誤的結果。正確的使用方法是Assert.AreEqual,它不返回任何內容,但如果參數不相等則拋出異常。

Assert.Equals被添加,因此上面的示例中的代碼不會回退到Object.Equals,並在單元測試中靜靜地中性。相反,當從單元測試中調用時,Assert.Equals總是會引發異常,提醒您不要使用它。