unit-testing Usare uno stub per fornire risposte in scatola


Esempio

Uno stub è un doppio test leggero che fornisce risposte predefinite quando vengono chiamati i metodi. Quando una classe sottoposta a test si basa su un'interfaccia o una classe base, è possibile implementare una classe "stub" alternativa per il test conforme all'interfaccia.

Quindi, assumendo la seguente interfaccia,

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

Se il seguente metodo doveva essere testato

public bool ProcessRecord(IRecordProvider provider)

Una classe stub che implementa l'interfaccia può essere scritta per restituire i dati noti al metodo in fase di test.

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" }
        };
    }
}

Questa implementazione di stub può quindi essere fornita al sistema in prova, per influenzarne il comportamento.

var stub = new RecordProviderStub();
var processed = sut.ProcessRecord(stub);