为什么你不能使用 Assert.Equals

曾经想知道为什么你不能为 Nunit 和 MSTest 使用 Assert.Equals()。如果你还没有开始,你需要知道你不能使用这种方法。相反,你将使用 Assert.AreEqual() 来比较两个对象的相等性。

这里的原因很简单。与任何类一样,Assert 类继承自 System.Object,它具有公共虚拟 Equals 方法,用于检查给定对象是否等于当前对象。因此,调用 equals 方法将是一个错误,因为在单元测试中,你将比较两个与 Assert 类无关的对象。因此,Nunit 和 MSTest 都选择为此目的提供方法 Assert.AreEqual。

此外,为了确保你不会错误地使用 Equals 方法,他们决定抛出异常以警告你,如果你错误地使用了它。

Nunit 实施:

        [EditorBrowsable(EditorBrowsableState.Never)]
    public static new bool Equals(object a, object b)
    {
        // TODO: This should probably be InvalidOperationException
        throw new AssertionException("Assert.Equals should not be used for Assertions");
    }