مرحبًا ، لا يمكنني اختبار أنواع الكائنات مع وجود قيد ، لكن التأكيد الكلاسيكي لا يزال يعمل
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>());
ما هي منصة ونسخة نونيت من فضلك؟
مرحباTobiasSekan. أود أن أقول أن هذا متوقع. في التأكيد الكلاسيكي ، أنت تقارن نوعين فقط. القيد "_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. أود أن أقول أن هذا متوقع. في التأكيد الكلاسيكي ، أنت تقارن نوعين فقط. القيد "_tests" ما إذا كانت القيمة الفعلية من النوع المقدم كوسيطة أو من النوع المشتق. _ "ونوع القيمة
typeof(TestEnum).GetEnumUnderlyingType()
هيSystem.RuntimeType
.على غرار ما يلي قد يفشل أيضًا (مع نفس النوع من الرسائل)
بينما
سيعمل. يمكنك دائمًا إعادة صياغة القيد كـ
Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));