返回在for-loop / foreach循环上设置的值

时间:2015-05-22 07:25:11

标签: c# moq

我是Moq的新手,我能够模拟一些场景,比如返回列表或对象。我遇到这个问题,我需要在循环中从GetNoteBookTypeAndProcess返回不同的值。在我的下面的例子中,我模拟GetNoteBooks方法并返回一个NoteBook对象列表(这里没有问题)。 现在在foreach循环中,我将此方法GetNoteBookTypeAndProcess模拟并返回一个字符串(芯片组)。 但我需要的是在我设置的模拟(循环)上返回不同的芯片组。目前我只能返回1,返回50值。

我也复制并粘贴了相同的设置,但GetNoteBookTypeAndProcess的返回值不同,但仍然没有运气。

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

1 个答案:

答案 0 :(得分:0)

您可以使用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);