我想你可能有另一个问题。NSubstitute 能够处理虚拟属性的替换。这是一个小程序,说明
public class SubstitutedClass
{
public virtual int SubstitutedProperty { get { throw new InvalidOperationException(); } }
}
internal class Program
{
private static void Main(string[] args)
{
var test2 = Substitute.For<SubstitutedClass>();
test2.SubstitutedProperty.Returns(10);
Console.WriteLine(test2.SubstitutedProperty);
}
}
编辑:关于您的使用,ForPartsOf
我认为不可能以这种方式覆盖属性,因为无法通知 NSubstitute 我们不希望它调用基本代码。这就是为什么文档提到不推荐使用部分子
您可以更改基类以返回虚函数的值;然后这个虚函数将被替换。呼叫者没有签名更改。虽然这是一个黑客,但你会得到你需要的
public class SubstitutedClass
{
public virtual int SubstitutedProperty { get { return InnerValue(); } }
public virtual int InnerValue() { throw new InvalidOperationException(); }
}
var test2 = Substitute.ForPartsOf<SubstitutedClass>();
test2.When(t => t.InnerValue()).DoNotCallBase();
test2.InnerValue().Returns(10);