NUnit 的 Assert.Equals 抛出异常“ Assert.Equals 不应用于断言”

我最近尝试使用 Assert 方法。在编写新的 NUnit 测试时等于()。在执行时,此方法抛出一个 AssertionException,表示 乍一看,这有点令人费解。这是怎么回事?

25969 次浏览

Assert是从 System 继承的静态类。对象,所有类在 C # 中都是隐式的。系统。对象实现以下方法:

static bool Equals(object a, object b)

用于相等比较的 Assert 方法是 Assert.AreEqual()方法。因此,通过单元测试中的 Assert 类调用 Object.Equals()方法肯定是一个错误。为了防止这个错误和避免混淆,NUnit 的开发人员有意将 Object.Equals隐藏在 Assert 类中,并使用抛出异常的实现。以下是实施方案:

/// <summary>
/// The Equals method throws an AssertionException. This is done
/// to make sure there is no mistake by calling this function.
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
[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");
}

当然,异常消息本身是令人困惑的,但至少它让您知道您的 什么的做错了。

Tldr;

Assert.AreEqual(a, b); // <-- Compares a, b

不要:

Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself