我正在尝试测试以下代码
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/