最近、新しいNUnitテストを作成するときに、Assert.Equals()メソッドを使用しようとしました。 実行時に、このメソッドは、これは一見少し困惑しているAssertionException
という記述を
スローします。Assert.Equals should not be used for Assertions.
何が起きてる?
23720 次
2 に答える
217
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");
}
もちろん、例外メッセージ自体は紛らわしいですが、少なくとも、何か間違ったことをしたことを知らせてくれます。
于 2012-07-20T17:52:28.297 に答える
20
tldr;
Assert.AreEqual(a, b); // <-- Compares a, b
いいえ:
Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself
于 2017-09-21T05:42:19.600 に答える