2010-01-26 16 views
7

sto cercando di testare il codice seguenteoggetto fittizio che restituisce un elenco di schernisce con Moq

public void CleanUp() 
    { 
     List<ITask> tasks = _cleanupTaskFactory.GetTasks(); 

     //Make sure each task has the task.Execute() method called on them 
    } 

Nella mia prova creo un'implementazione deriso di _cleanupTaskFactory, e voglio stub le GetTasks() metodo per restituire un tipo:

List<Mock<ITask>> 

... ma il compilatore non lo accetta come valore di ritorno.

Il mio obiettivo è garantire che ogni attività restituita abbia il metodo .Execute() chiamato su di esso utilizzando il metodo MoQ Verify().

Come posso affermare che ogni attività viene eseguita?

risposta

10

Nella tua _cleanUpTaskFactory finta si può semplicemente fare qualcosa di simile al seguente:

var mocks = new List<Mock<ITask>>(); 
for(var i = 0; i < 10; i++){ 
    var mock = new Mock<ITask>(); 
    mock.Setup(t => t.Execute()).Verifiable(); 
    mocks.Add(mock); 
} 

_cleanUpTaskFactoryMock.Setup(f => f.GetTasks()).Returns(mocks.Select(m => m.Object).Tolist()); 

Ora fare in modo di mantenere un riferimento all'elenco mocks, e quando si è fatto con il test di eseguire iterazioni su tutte le deride e chiama Verify() così:

mocks.ForEach(m => m.Verify()); 
+1

+1 Mi hai battuto su di esso: / –

Problemi correlati