mocking - NSubstitute仅拦截 "setter"属性调用

标签 mocking nsubstitute

使用 NSubstitute,有什么方法可以捕获传递给属性 setter 的值吗?

例如如果我有以下界面:

public interface IStudent {
    int Id { set; }
    string Name { set; }
}

说我创建了一个替代品,例如:

var _studentSub = Substitute.For<IStudent>();

如果调用替代的任何“set”方法,有什么方法可以拦截并捕获该值吗?

最佳答案

NSubstitute 的标准方法是拥有带有 getter 和 setter 的属性,这样替代品上的属性将按预期工作(即,您将返回设置的内容)。

如果您的接口(interface)必须具有仅限 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);
}

关于mocking - NSubstitute仅拦截 "setter"属性调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7637024/

相关文章:

c# - 如何使用 NSubstitute 模拟对同一方法的一系列调用以返回 AutoFixture 中的不同值?

c# - 使用 NUnit 和 NSubstitute 对通用存储库进行单元测试

unit-testing - 模拟类(class)还是真实类(class)?

jmeter - 如何对对并发用户数有限制的第 3 方 API 进行性能测试?

PHPUnit:如何模拟这个文件系统?

java - 我如何用 Java 模拟这个客户端?

c# - 使用 out 参数在 NSubstitute 模拟方法中返回不同的值

c# - NSubstitute 虚拟 getter 使用 ForPartsOf 返回替换抛出异常

c# - NSubstitute:如何访问返回中的实际参数

java - 单元测试 - 注入(inject)空模拟组件