Нанит это утверждать.Равно бросает исключение " утверждать.Равно не должны использоваться для утверждения"


недавно я попытался использовать метод Assert.Равно () при написании нового теста NUnit. При выполнении этого метода выдает AssertionException о том, что Assert.Equals should not be used for Assertions. Это немного сбивает с толку на первый взгляд. Что здесь происходит?

2 114

2 ответа:

Assert является статическим классом, наследующим от System.Объект, как и все классы неявно в c#. Система.Объект реализует следующий метод:

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");
 }

конечно, само сообщение об исключении сбивает с толку, но по крайней мере оно позволяет вам знать, что вы сделали что-то неправильно.

tldr;

Assert.AreEqual(a, b); // <-- Compares a, b

нет:

Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself