Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为循环/foreach循环设置的返回值_C#_Moq - Fatal编程技术网

C# 为循环/foreach循环设置的返回值

C# 为循环/foreach循环设置的返回值,c#,moq,C#,Moq,我是Moq新手,我能够模拟一些场景,比如返回列表或对象。我遇到了这个问题,我需要从循环中的GetNoteBookTypeAndProcess返回不同的值。在下面的示例中,我模拟getNotebook方法并返回一个NoteBook对象列表(这里没有问题)。 现在在foreach循环中,我模拟了这个方法GetNoteBookTypeAndProcessmock并返回一个字符串(芯片组)。 但我需要的是在我设置的模拟(循环)的基础上返回不同的芯片组。目前我只能返回1,返回50的值 我还为GetNote

我是Moq新手,我能够模拟一些场景,比如返回列表或对象。我遇到了这个问题,我需要从循环中的
GetNoteBookTypeAndProcess
返回不同的值。在下面的示例中,我模拟getNotebook方法并返回一个NoteBook对象列表(这里没有问题)。 现在在foreach循环中,我模拟了这个方法
GetNoteBookTypeAndProcess
mock并返回一个字符串(芯片组)。 但我需要的是在我设置的模拟(循环)的基础上返回不同的芯片组。目前我只能返回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);
}
var results=getNotebook()//数据库调用
var芯片组=新列表();
foreach(结果中的var项目)
{
var结果=GetNoteBookTypeAndProcess(items.OrderNum);
芯片组。添加(结果);
}
模拟单元测试

        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);
mock.Setup(m=>m.getNotebook()).Returns(newlist())
{
新笔记本{OrderNum=1,价格=1000,类型=50},
新笔记本{OrderNum=2,Price=2000,Type=51},
新笔记本{OrderNum=3,Price=3000,Type=52}
});
mock.Setup(m=>m.GetNoteBookTypeAndProcess(OrderNum)).Returns(50);

您可以使用
返回(Func)

var数据=新列表()
{
新笔记本{OrderNum=1,价格=1000,类型=50},
新笔记本{OrderNum=2,Price=2000,Type=51},
新笔记本{OrderNum=3,Price=3000,Type=52}
};
mock.Setup(m=>m.getNotebook())。返回(数据);
mock.Setup(m=>m.GetNoteBookTypeAndProcess(It.IsAny()))
.Returns((int orderNumber)=>data.Single(x=>x.orderNumber==orderNumber).Type);

您可以为同一模拟调用
设置
多次,并根据提供的输入返回不同的值。这是你想要的吗?或者看看
返回(Func)
@Uriil,是的,我想我可以通过多次设置来实现。谢谢“我认为我必须在上面做些特别的事情。”威尔史密斯,你能给我举个例子说明你的意思吗?谢谢,非常感谢。
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);