NUnit中的TypeOf和InstanceOf有什么区别?

时间:2018-10-16 20:39:13

标签: c# nunit

NUnit中,Is.TypeOfIs.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
}

1 个答案:

答案 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,因为它检查结果类型是否仅为BooInstanceOf将返回true,因为它会检查结果类型是Boo还是Woo