web-dev-qa-db-ja.com

オブジェクトのタイプをユニットテストする正しい方法

Visual Studioユニットテストフレームワークを使用して、2つのオプションを調べています。

Assert.AreEqual(myObject.GetType(), typeof(MyObject));

そして

Assert.IsInstanceOfType(myObject, typeof(MyObject));

これらの2つのオプションに違いはありますか? 1つは他より「正しい」ですか?

これを行う標準的な方法は何ですか?

17
drl

最初の例はタイプがまったく同じでない場合に失敗しますが、2番目の例はmyObjectが指定されたタイプに割り当てられない場合にのみ失敗します。

public class MySubObject : MyObject { ... }
var obj = new MySubObject();

Assert.AreEqual(obj.GetType(), typeof(MyObject));   //fails
Assert.IsInstanceOfType(obj, typeof(MyObject));     //passes
27
Lee

マイナーな構文上のポイント:上記のAssert.AreEqual()ステートメントは機能しますが、パラメーターの順序は逆にする必要があります(つまり、Assert.AreEqual(Type expected, Type actual))。

したがって、この場合:Assert.AreEqual(typeof(MyObject), obj.GetType());

7
Tim Peara

xUnitの方が優れているようです。

Assert.IsType<MyClass>(myObj);
1
stoneskin

私の場合、次の行でうまくいきます:

Assert.IsAssignableFrom<TheClass>(result);
0
Kiril Dobrev