使用存根提供預設響應

存根是輕量級測試雙重,在呼叫方法時提供固定響應。在被測試的類依賴於介面或基類的情況下,可以實現替代的存根類以用於符合介面的測試。

所以,假設以下介面,

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