NSubstitute - 伪造一个调用另一个虚方法的虚方法

时间:2016-01-19 12:15:08

标签: c# unit-testing nsubstitute

我有一个看起来像这样的课程:

public class MyClass
{
    public virtual bool A()
    {
        return 5 < B();
    }

    protected virtual int B()
    {
        return new Random.Next(1, 10);
    }
}

MyClass编写测试时,能够执行以下操作非常方便:

[Fact]
public void Blabla()
{
    var o = Substitute.ForPartsOf<MyClass>();
    o.A().Returns(true);

    Assert.True(o.DoSomethingElse());
}

然而,这不起作用。我得到一个运行时异常:

  

NSubstitute.Exceptions.CouldNotSetReturnDueToTypeMismatchException

     

无法为MyClass.A返回Boolean类型的值(期望类型为int)。

有没有办法绕过这个,或者我是否必须创建一个覆盖A的具体测试双重类?

1 个答案:

答案 0 :(得分:2)

我通过修改测试代码解决了这个问题:

var o = Substitute.ForPartsOf<MyClass>();
o.When(x => x.A()).DoNotCallBase();
o.A().Returns(true);

Assert.True(o.DoSomethingElse());

这可以防止假冒在以下Returns()调用中调用实际实现。