Assert
là một lớp tĩnh kế thừa từ System.Object, vì tất cả các lớp đều ngầm hiểu trong C #. System.Object thực hiện phương thức sau:
static bool Equals(object a, object b)
Các phương thức trên Assert được dự định để so sánh bằng là các Assert.AreEqual()
phương thức. Do đó, việc gọi Object.Equals()
phương thức thông qua lớp Assert trong một bài kiểm tra đơn vị chắc chắn là một sai lầm. Để ngăn ngừa lỗi này và tránh nhầm lẫn, các nhà phát triển của NUnit đã cố tình ẩn Object.Equals
trong lớp Assert với một triển khai đưa ra một ngoại lệ. Đây là cách thực hiện:
/// <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");
}
Tất nhiên bản thân thông báo ngoại lệ là khó hiểu, nhưng ít nhất nó cho bạn biết bạn đã làm gì đó sai.