为什么存在Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Equals()?

15

来自MSDN文档的Assert.Equals()的描述:

不要使用此方法。

这就是全部说明。嗯...好吧,那么...它为什么会在那里呢?它是一个早期框架版本中弃用的方法吗?是只能由其他Microsoft程序集使用的东西吗?

这让我更想使用它,因为我知道我不应该使用它。;-)

有人知道吗?

4个回答

22

.Equals方法继承自Object类。它被标注为“不要使用这个方法”,以便用户不会将其与AreEqual方法混淆。


请注意,“CollectionAssert”具有公开“Object.Equals”的相同缺陷。与“Assert”不同,“CollectionAssert”不会重新定义该方法,因此在运行包含“Assert.Equals”的测试时,您不会像运行包含“Assert.Equals”的测试一样获得有用的测试失败信息。 - vvnurmi

4
所有.NET中的对象都派生自Object
Object有一个.Equals()方法。
显然,这个特定对象的.Equals()方法没有任何有用的作用,所以文档警告你它没有任何有用的作用。

1

Assert.Equals,就像它的基类方法Object.Equals一样,非常适用于比较对象。然而,这两种方法都不适用于单独检测和报告单元测试中的错误,因为Object.Equals返回一个布尔值而不是抛出异常,如果值不相等,这会成为一个问题,如果在单元测试中这样使用:

Assert.Equals(42, ComputeMeaningOfLife());

除了这个单元测试可能运行太长的问题之外,即使Compute方法提供错误的结果,此测试也会悄悄地成功。正确的方法是使用Assert.AreEqual,它不返回任何内容,但如果参数不相等则会抛出异常。
添加了Assert.Equals以避免像上面示例中的代码回退到Object.Equals并悄悄地破坏单元测试。相反,当从单元测试调用时,Assert.Equals总是会抛出异常,提醒您不要使用它。

1

它在2008年进行了更改(可能是SP1),以便在调用时失败测试,这样那些无意中使用它的人会被告知他们真的不应该使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接