最近、新しい 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");
}
もちろん例外メッセージ自体はわかりにくいですが、少なくとも、何か間違っている。