2009-01-28 71 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总是会引发异常,提醒您不要使用它。