최근에 새로운 NUnit 테스트를 작성할 때 Assert.Equals () 메소드를 사용하려고 시도했습니다. 실행 시이 메소드는 이것이 언뜻보기에 조금 당황 스럽다는 AssertionException
진술을
던집니다 Assert.Equals should not be used for Assertions.
. 무슨 일이야?
답변
Assert
모든 클래스가 C #에서 암시 적으로 수행하므로 System.Object에서 상속되는 정적 클래스입니다. 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");
}
물론 예외 메시지 자체는 혼란 스럽지만 적어도 뭔가 잘못한 것을 알려 줍니다.
답변
tldr;
Assert.AreEqual(a, b); // <-- Compares a, b
아니:
Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself