NUnit的Assert.Equals抛出exception“Assert.Equals不应该用于断言”
我最近尝试在编写新的NUnittesting时使用方法Assert.Equals()。 一旦执行,此方法将引发一个AssertionException
exception, AssertionException
Assert.Equals should not be used for Assertions.
初看起来有点莫名其妙。 这里发生了什么?
Assert
是从System.Objectinheritance的静态类,因为所有的类都隐含在c#中。 System.Object实现以下方法:
static bool Equals(object a, object b)
Assert中用于相等比较的方法是Assert.AreEqual()
方法。 因此,在unit testing中通过Assert类调用Object.Equals()
方法肯定是一个错误。 为了防止这种错误,避免混淆,NUnit的开发人员有意在Assert类中隐藏Object.Equals
,并引发exception。 这是实现:
/// <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"); }
当然,这个exception信息本身是令人困惑的,但至less它让你知道你做错了什么 。
tldr;
Assert.AreEqual(a, b); // <-- Compares a, b
不:
Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself