Return 值在 for-loop/foreach 循环中设置
Return values set on for-loop/foreach loop
我是 Moq 的新手,我能够模拟一些场景,例如 returning 列表或对象。我遇到了这个问题,我需要在循环中从 GetNoteBookTypeAndProcess
获取不同的值 return。在下面的示例中,我模拟了 GetNoteBooks 方法和 return NoteBook 对象列表(这里没有问题)。
现在在 foreach 循环中,我模拟了这个方法 GetNoteBookTypeAndProcess
并且 return 是一个字符串(芯片组)。
但我需要的是 return 基于我设置的模拟的不同芯片组(循环)。目前我只能 return 1 其中 return 50 值。
我也复制并粘贴了相同的设置,但 GetNoteBookTypeAndProcess
的 Return 不同,但仍然没有成功。
var results = GetNoteBooks(); //database call
var chipset = new List<string>();
foreach (var items in results)
{
var result = GetNoteBookTypeAndProcess(items.OrderNum);
chipset.Add(result);
}
模拟单元测试
mock.Setup(m => m.GetNoteBooks()).Returns(new List<NoteBook>()
{
new NoteBook { OrderNum = 1, Price = 1000, Type = 50 },
new NoteBook { OrderNum = 2, Price = 2000, Type = 51 },
new NoteBook { OrderNum = 3, Price = 3000, Type = 52 }
});
mock.Setup(m => m.GetNoteBookTypeAndProcess(OrderNum)).Returns(50);
您可以使用 Returns<T>(Func<T, TResult>)
overload
var data = new List<NoteBook>()
{
new NoteBook { OrderNum = 1, Price = 1000, Type = 50 },
new NoteBook { OrderNum = 2, Price = 2000, Type = 51 },
new NoteBook { OrderNum = 3, Price = 3000, Type = 52 }
};
mock.Setup(m => m.GetNoteBooks()).Returns(data);
mock.Setup(m => m.GetNoteBookTypeAndProcess(It.IsAny<int>()))
.Returns((int orderNumber) => data.Single(x => x.OrderNumber == orderNumber).Type);
我是 Moq 的新手,我能够模拟一些场景,例如 returning 列表或对象。我遇到了这个问题,我需要在循环中从 GetNoteBookTypeAndProcess
获取不同的值 return。在下面的示例中,我模拟了 GetNoteBooks 方法和 return NoteBook 对象列表(这里没有问题)。
现在在 foreach 循环中,我模拟了这个方法 GetNoteBookTypeAndProcess
并且 return 是一个字符串(芯片组)。
但我需要的是 return 基于我设置的模拟的不同芯片组(循环)。目前我只能 return 1 其中 return 50 值。
我也复制并粘贴了相同的设置,但 GetNoteBookTypeAndProcess
的 Return 不同,但仍然没有成功。
var results = GetNoteBooks(); //database call
var chipset = new List<string>();
foreach (var items in results)
{
var result = GetNoteBookTypeAndProcess(items.OrderNum);
chipset.Add(result);
}
模拟单元测试
mock.Setup(m => m.GetNoteBooks()).Returns(new List<NoteBook>()
{
new NoteBook { OrderNum = 1, Price = 1000, Type = 50 },
new NoteBook { OrderNum = 2, Price = 2000, Type = 51 },
new NoteBook { OrderNum = 3, Price = 3000, Type = 52 }
});
mock.Setup(m => m.GetNoteBookTypeAndProcess(OrderNum)).Returns(50);
您可以使用 Returns<T>(Func<T, TResult>)
overload
var data = new List<NoteBook>()
{
new NoteBook { OrderNum = 1, Price = 1000, Type = 50 },
new NoteBook { OrderNum = 2, Price = 2000, Type = 51 },
new NoteBook { OrderNum = 3, Price = 3000, Type = 52 }
};
mock.Setup(m => m.GetNoteBooks()).Returns(data);
mock.Setup(m => m.GetNoteBookTypeAndProcess(It.IsAny<int>()))
.Returns((int orderNumber) => data.Single(x => x.OrderNumber == orderNumber).Type);