NUnit の Assert.Equals が例外をスローします。「Assert.Equals はアサーションに使用しないでください」質問する

NUnit の Assert.Equals が例外をスローします。「Assert.Equals はアサーションに使用しないでください」質問する

最近、新しい NUnit テストを作成するときに Assert.Equals() メソッドを使用しようとしました。実行すると、このメソッドは「一見すると少し困惑します。一体何が起こっているのでしょうか?」AssertionExceptionというメッセージを表示します。Assert.Equals should not be used for Assertions.

ベストアンサー1

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

もちろん例外メッセージ自体はわかりにくいですが、少なくとも、何か間違っている。

おすすめ記事