unit-testing - 使用 Moq 返回模拟列表的模拟对象

标签 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 的模拟实现,我想 stub GetTasks() 方法以返回一个类型:
List<Mock<ITask>>

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

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

我如何断言每个任务都被执行了?

最佳答案

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

关于unit-testing - 使用 Moq 返回模拟列表的模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139908/

相关文章:

c - 如何用纯 C 编写单元测试?

ruby-on-rails - RSpec - 模拟类方法

c# - Rhinomock 期望中的非原始对象

c# - Moq伪造一种方法但使用另一种方法的真实实现

c# - 验证 File.Delete 是否已使用 Moq 调用

c# - 测试 Entity Framework 存储库 Update() 时 Moq 测试空引用异常

c# - 更快地创建测试方法

Android:使用ActivityInstrumentationTestCase2进行测试时如何获取上下文?

visual-studio - 如何解决此错误 : vstest.executionengine.x86.exe 已停止工作?

java - 使用 Mockito 模拟 Apache HTTPClient