Halo, saya tidak dapat menguji tipe objek dengan batasan, tetapi pernyataan klasik masih berfungsi
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>());
Platform apa dan versi nunit apa?
Hai @TobiasSekan. Saya akan mengatakan bahwa ini diharapkan. Dalam pernyataan klasik Anda hanya membandingkan dua jenis. Batasan "_tests apakah nilai sebenarnya dari tipe yang disediakan sebagai argumen atau tipe turunan._" dan tipe nilai typeof(TestEnum).GetEnumUnderlyingType()
adalah System.RuntimeType
.
Serupa, berikut ini juga akan gagal (dengan jenis pesan yang sama)
Assert.That(typeof(string), Is.TypeOf<string>());
sedangkan
Assert.That("", Is.TypeOf<string>());
akan bekerja. Anda selalu dapat menyusun ulang batasan sebagai Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));
Tangkapan yang bagus @mikkelbu. Saya akan menutup ini sebagai not a bug
. @TobiasSekan Saya dapat melihat kebingungan, tetapi secara efektif parameter pertama Anda adalah TypeOf<Type>
bukan ushort
.
Oke, terima kasih atas informasinya
Komentar yang paling membantu
Hai @TobiasSekan. Saya akan mengatakan bahwa ini diharapkan. Dalam pernyataan klasik Anda hanya membandingkan dua jenis. Batasan "_tests apakah nilai sebenarnya dari tipe yang disediakan sebagai argumen atau tipe turunan._" dan tipe nilai
typeof(TestEnum).GetEnumUnderlyingType()
adalahSystem.RuntimeType
.Serupa, berikut ini juga akan gagal (dengan jenis pesan yang sama)
sedangkan
akan bekerja. Anda selalu dapat menyusun ulang batasan sebagai
Assert.That(typeof(TestEnum).GetEnumUnderlyingType(), Is.EqualTo(typeof(ushort)));