NSubstitute拦截"setter"只有属性调用

bst*_*ack 8 mocking nsubstitute

使用NSubstitute,有没有办法捕获传递给属性设置器的值?

例如,如果我有以下界面:

public interface IStudent {
    int Id { set; }
    string Name { set; }
}
Run Code Online (Sandbox Code Playgroud)

说我有一个替代品,例如:

var _studentSub = Substitute.For<IStudent>();
Run Code Online (Sandbox Code Playgroud)

如果调用替代的任何"set"方法,我有什么方法可以拦截和捕获值?

Dav*_*pak 14

NSubstitute的标准方法是使用getter和setter属性,因为替换上的属性将按预期工作(即,您将获得所设置的内容).

如果您的界面必须具有仅限setter的属性,则可以使用以下方法捕获单个属性的值Arg.Do:

[Test]
public void Setter() {
    var sub = Substitute.For<IStudent>();
    var name = "";
    sub.Name = Arg.Do<string>(x => name = x);

    sub.Name = "Jane";

    Assert.AreEqual("Jane", name);
}
Run Code Online (Sandbox Code Playgroud)