有没有办法在没有 setter 的情况下使用 nsubstitute 模拟 属性?

Is there any way to mock property without setter using nsubstitute?

我有一些代码,比如:

class MyClass
{
    private int _myField;

    public int MyField => _myField;
}

如何使用 nsubstitute 模拟 MyField?还是不可能?

要让 NSubstitute 能够模拟您的 属性,它必须是 virtualabstract。但在那之后,你可以像其他任何东西一样模拟它:

var mock = Substitute.For<MyClass>();
mock.MyField.Returns(-1);

更常见的是,您希望在界面上替换一个值。现在,如果您的 MyClass 实现了下面的 ITest 接口,您就可以在接口上进行替换。

[Test]
public void CanSubstituteReadOnlyPropertyOnInterface()
{

  var n = NSubstitute.Substitute.For<ITest>();
  n.X.Returns(55);
  Assert.AreEqual(55, n.X);

}

public interface ITest
{
    int X { get; }

}