我最近在编写新的 NUnit 测试时尝试使用 Assert.Equals() 方法。执行此方法时会抛出一个 AssertionException
,说明
Assert.Equals 不应该用于断言。
乍一看这有点令人困惑。这是怎么回事?
最佳答案
Assert
是一个继承自 System.Object 的静态类,就像所有类在 C# 中隐式执行的那样。 System.Object 实现以下方法:
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");
}
当然,异常消息本身令人困惑,但至少它让您知道您做错了某事。
关于.net - NUnit 的 Assert.Equals 抛出异常 "Assert.Equals should not be used for assertions",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584429/