2010-01-26 10 views
7

estoy tratando de probar el siguiente códigoobjeto Mock devolver una lista de burla con Moq

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

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

En mi prueba creo una aplicación burlado de _cleanupTaskFactory, y quiero derivadas La getTasks() para devolver un tipo:

List<Mock<ITask>> 

... pero el compilador no aceptará eso como un valor devuelto.

Mi objetivo es garantizar que cada tarea devuelta tenga invocado el método .Execute() utilizando el método MoQ de Verificación().

¿Cómo puedo afirmar que cada tarea se ejecuta?

Respuesta

10

En su _cleanUpTaskFactory simulacro simplemente podría hacer algo como lo siguiente:

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

Ahora, asegúrese de mantener una referencia a la lista mocks, y cuando haya terminado con su prueba de iterar sobre todos los simulacros y llame al Verify() como lo siguiente:

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

+1 Me lo ganaste: / –

Cuestiones relacionadas