【问题标题】:Mock object returning a list of mocks with Moq使用 Moq 返回模拟列表的模拟对象
【发布时间】:2010-01-26 14:13:42
【问题描述】:

我正在尝试测试以下代码

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

如何断言每个任务都已执行?

【问题讨论】:

    标签: unit-testing mocking moq


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多