unit-testing 使用存根提供罐头响应

示例

存根是一种轻量级测试双,它在调用方法时提供罐装响应。如果被测类依赖于接口或基类,则可以实现符合接口的替代“存根”类进行测试。

因此,假设使用以下接口,

public interface IRecordProvider {
    IEnumerable<Record> GetRecords();
}

如果要测试以下方法

public bool ProcessRecord(IRecordProvider provider)

可以编写实现该接口的存根类,以将已知数据返回到要测试的方法。

public class RecordProviderStub : IRecordProvider
{
    public IEnumerable<Record> GetRecords()
    {
        return 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 stub = new RecordProviderStub();
var processed = sut.ProcessRecord(stub);