Hello, I can't test object types with a constraint, but the classic assert is still working
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>());
What platform and what nunit version please?
Hi @TobiasSekan. I would say that this is expected. In the classic assertion you are just comparing two types. The constraint "_tests whether the actual value is of the type supplied as an argument or a derived type._" and the type of the value typeof(TestEnum).GetEnumUnderlyingType()
is System.RuntimeType
.
Similar the following would also fail (with the same kind of message)
Assert.That(typeof(string), Is.TypeOf<string>());
whereas
Assert.That("", Is.TypeOf<string>());
would work. You could always rephrase the constraint as Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));
Good catch @mikkelbu. I am going to close this as not a bug
. @TobiasSekan I can see the confusion, but effectively your first parameter is TypeOf<Type>
not ushort
.
Okay, thank you for the information
Most helpful comment
Hi @TobiasSekan. I would say that this is expected. In the classic assertion you are just comparing two types. The constraint "_tests whether the actual value is of the type supplied as an argument or a derived type._" and the type of the value
typeof(TestEnum).GetEnumUnderlyingType()
isSystem.RuntimeType
.Similar the following would also fail (with the same kind of message)
whereas
would work. You could always rephrase the constraint as
Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));