.net - NUnit 的 Assert.Equals 抛出异常 "Assert.Equals should not be used for assertions"

标签 .net nunit

我最近在编写新的 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/

相关文章:

c# - 满足这些要求的最佳 ORM 是什么

c# - 自动生成 xaml ResourceDictionary

.net - Specflow 的自定义属性生成

c# - 使用WCF按照行业标准实现服务?

asp.net-mvc - NUnit框架生命周期执行顺序是什么?

c# - 测试 ViewModel PropertyChanged 事件

c# - NUnit 3 : Forbid tests to run in parallel

c# - 对于 Visual Studio 2008 中的 C#,我应该从哪个单元测试框架开始? (Windows 窗体应用程序)

c# - VS2019 中的测试资源管理器显示 "No source available"用于规范流测试

c# - 取出列表中的每个第二个对象