我有一个看起来像这样的课程:
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
的具体测试双重类?
答案 0 :(得分:2)
我通过修改测试代码解决了这个问题:
var o = Substitute.ForPartsOf<MyClass>();
o.When(x => x.A()).DoNotCallBase();
o.A().Returns(true);
Assert.True(o.DoSomethingElse());
这可以防止假冒在以下Returns()
调用中调用实际实现。