こんにちは、制約付きのオブジェクトタイプをテストすることはできませんが、従来のアサートは引き続き機能します
enum TestEnum : ushort
{
one = 0x01,
two = 0x02
}
// test is okay
Assert.AreEqual(typeof(ushort), typeof(TestEnum).GetEnumUnderlyingType());
// test failed
//
// Expected: <System.Uint16>
// But was: <System.RuntimeType>
//
Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.TypeOf<ushort>());
どのプラットフォームとどのnunitバージョンをお願いしますか?
こんにちは@TobiasSekan。 これは予想されることだと思います。 古典的なアサーションでは、2つのタイプを比較しているだけです。 制約「_testsは、実際の値が引数として指定された型であるか、派生型であるかをテストします。_」であり、値typeof(TestEnum).GetEnumUnderlyingType()
はSystem.RuntimeType
です。
同様に、以下も失敗します(同じ種類のメッセージで)
Assert.That(typeof(string), Is.TypeOf<string>());
一方
Assert.That("", Is.TypeOf<string>());
うまくいくだろう。 制約はいつでもAssert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));
言い換えることができます
グッドキャッチ@mikkelbu。 これをnot a bug
として閉じます。 @TobiasSekan混乱が見られますが、TypeOf<Type>
ではなくushort
です。
さて、情報をありがとう
最も参考になるコメント
こんにちは@TobiasSekan。 これは予想されることだと思います。 古典的なアサーションでは、2つのタイプを比較しているだけです。 制約「_testsは、実際の値が引数として指定された型であるか、派生型であるかをテストします。_」であり、値
typeof(TestEnum).GetEnumUnderlyingType()
はSystem.RuntimeType
です。同様に、以下も失敗します(同じ種類のメッセージで)
一方
うまくいくだろう。 制約はいつでも
Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));
言い換えることができます