Assert
- это статический класс, унаследованный от System.Object, как и все классы в C # неявно. System.Object реализует следующий метод:
static bool Equals(object a, object b)
Методы в Assert, которые предназначены для сравнения на равенство, являются Assert.AreEqual()
методами. Поэтому вызов Object.Equals()
метода через класс Assert в модульном тесте, безусловно, является ошибкой. Чтобы предотвратить эту ошибку и избежать путаницы, разработчики 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");
}
Конечно, само сообщение об исключении сбивает с толку, но, по крайней мере, позволяет узнать, что вы сделали что-то не так.