模拟对象返回Moq的模拟列表

时间:2010-01-26 14:13:42

标签: unit-testing mocking moq

我正在尝试测试以下代码

    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()方法。

如何判断每项任务是否已执行?

1 个答案:

答案 0 :(得分:11)

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