在NUnit
中,Is.TypeOf
和Is.InstanceOf
有什么区别?
在下面的示例中,我注意到它们都返回true:
public class Foo
{
public Boo GetBoo()
{
return new Boo();
}
}
public class Boo { }
还有NUnit
测试方法:
[Test]
public void GetBoo_WhenCalled_ReturnBoo
{
var foo = new Foo();
var result = foo.GetBoo();
Assert.That(result, Is.TypeOf<Boo>()); //return true
Assert.That(result, Is.InstanceOf<Boo>()); //return true
}
答案 0 :(得分:5)
documentation有点难以理解:
TypoOf
-测试对象是确切的类型。
InstanceOf
-测试对象是Type的实例
这意味着与TypoOf
相比,InstanceOf
还将测试派生类。
因此,在以下示例中:
public class Foo
{
public Boo GetBoo()
{
return new Woo();
}
}
public class Woo : Boo { }
测试方法:
[Test]
public void GetBoo_WhenCalled_ReturnBoo()
{
var foo = new Foo();
var result = foo.GetBoo();
Assert.that(result, Is.TypeOf<Boo>()); // False ("Boo")
Assert.that(result, Is.InstanceOf<Boo>()); //True ("Boo" or "Woo")
}
TypeOf
将返回false,因为它检查结果类型是否仅为Boo
。
InstanceOf
将返回true,因为它会检查结果类型是Boo
还是Woo
。