使用模擬框架作為存根

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);