2010-01-26 10 views
7

Je suis en train de tester le code suivantobjet Mock retourner une liste de raille avec Moq

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

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

Dans mon test, je crée une mise en œuvre moqué de _cleanupTaskFactory, et je veux bouchonner la méthode GetTasks() pour revenir un type:

List<Mock<ITask>> 

... mais le compilateur n'acceptera pas cela comme valeur de retour.

Mon but est de m'assurer que chaque méthode renvoyée a la méthode .Execute() appelée à l'aide de la méthode Verify() MoQ.

Comment puis-je affirmer que chaque tâche est exécutée?

Répondre

10

Dans votre _cleanUpTaskFactory maquette vous pouvez simplement faire quelque chose comme ce qui suit:

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

Maintenant, assurez-vous de conserver une référence à la liste mocks, et quand vous avez fait avec vos tests vous itérer sur tous les simulacres et appelez Verify() comme ça:

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

+1 Vous m'avez battu: / –