Visual Studioユニットテストフレームワークを使用して、2つのオプションを調べています。
Assert.AreEqual(myObject.GetType(), typeof(MyObject));
そして
Assert.IsInstanceOfType(myObject, typeof(MyObject));
これらの2つのオプションに違いはありますか? 1つは他より「正しい」ですか?
これを行う標準的な方法は何ですか?
最初の例はタイプがまったく同じでない場合に失敗しますが、2番目の例はmyObject
が指定されたタイプに割り当てられない場合にのみ失敗します。
public class MySubObject : MyObject { ... }
var obj = new MySubObject();
Assert.AreEqual(obj.GetType(), typeof(MyObject)); //fails
Assert.IsInstanceOfType(obj, typeof(MyObject)); //passes
マイナーな構文上のポイント:上記のAssert.AreEqual()
ステートメントは機能しますが、パラメーターの順序は逆にする必要があります(つまり、Assert.AreEqual(Type expected, Type actual)
)。
したがって、この場合:Assert.AreEqual(typeof(MyObject), obj.GetType());
xUnitの方が優れているようです。
Assert.IsType<MyClass>(myObj);
私の場合、次の行でうまくいきます:
Assert.IsAssignableFrom<TheClass>(result);