使用模拟框架作为存根

Mock 和 Stub 这两个词经常会混淆。造成这种情况的部分原因是,许多模拟框架还支持创建 Stub,而无需与 Mocking 相关的验证步骤。

不像在使用存根来提供预设响应示例中那样编写新类来实现存根,而是可以使用模拟框架。

使用 Moq:

var stub = new Mock<IRecordProvider>();
stub.Setup(provider => provider.GetRecords()).Returns(new List<Record> {
    new Record { Id = 1, Flag=false, Value="First" },
    new Record { Id = 2, Flag=true, Value="Second" },
    new Record { Id = 3, Flag=false, Value="Third" }
});

这实现了与手动编码存根相同的行为,并且可以以类似的方式提供给被测系统:

var processed = sut.ProcessRecord(stub.Object);