為什麼你不能使用 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");
    }