2010-01-26 46 views
7

我想测试下面的代码模仿对象返回嘲笑的列表,起订量

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

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

在我的测试我创建了一个嘲笑实现_cleanupTaskFactory的,我想存根GetTasks()方法返回一个类型:

List<Mock<ITask>> 

...但编译器不会接受它作为返回值。

我的目标是确保每个返回的任务都有使用Verify()MoQ方法调用的.Execute()方法。

我怎样才能断言每个任务得到执行?

回答

10

在你_cleanUpTaskFactory模拟,你可以简单地做一些这样的:

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

现在一定要保持到mocks列表的引用,当你与你的测试做了你遍历所有的嘲笑和请致电Verify()像这样:

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

+1你打我吧:/ – 2010-01-26 14:29:23