C# 返回正确结果的Moq设置方法

C# 返回正确结果的Moq设置方法,c#,moq,nunit-3.0,C#,Moq,Nunit 3.0,需要帮助可以这样管理Moq设置吗 repositoryMock.Setup(s => s.Find(It.IsAny<object>())).Returns(() => DataList().FirstOrDefault(w => w.Id == It.IsAny<Guid>())); repositoryMock.Setup(s=>s.Find(It.IsAny())。返回(()=>DataList().FirstOrDefault(w=>w.Id=

需要帮助可以这样管理Moq设置吗

repositoryMock.Setup(s => s.Find(It.IsAny<object>())).Returns(() => DataList().FirstOrDefault(w => w.Id == It.IsAny<Guid>()));
repositoryMock.Setup(s=>s.Find(It.IsAny())。返回(()=>DataList().FirstOrDefault(w=>w.Id==It.IsAny());
为什么我要问这个问题,因为在这个设置中,我总是得到return null,但是如果我只输入return DataList().FirstOrDefault(),它将正确返回列表中的第一个元素。我的问题是如何用“N”元素管理DATAIST,其中需要的元素将在中间,当模拟设置运行时返回元素是否存在?< /P> 更新

private IList<Data> DataList()
{
        List<Data> dataList = new List<Data> {

            new Data
            {
                Id =  new Guid("299cd2b5-ab47-4006-9a47-c35e4770e9b1"),

            },
            new Data
            {
                Id = new Guid("279cd2b5-ab47-4006-9a47-c35e4770e9b1"),

            }
        };
        return dataList;
    }
private IList数据列表()
{
列表数据列表=新列表{
新数据
{
Id=新Guid(“299cd2b5-ab47-4006-9a47-c35e4770e9b1”),
},
新数据
{
Id=新Guid(“279cd2b5-ab47-4006-9a47-c35e4770e9b1”),
}
};
返回数据列表;
}

如果您想返回至少一个对象,请问候,

repositoryMock.Setup(s => s.Find(It.IsAny<IBaseRepository>())).Returns(() => DataList().FirstOrDefault(w => w.Id == It.Is<Guid>()));
repositoryMock.Setup(s=>s.Find(It.IsAny())。返回(()=>DataList().FirstOrDefault(w=>w.Id==It.Is());

捕获
返回
委托中传递的参数,并使用该参数筛选列表

repositoryMock
    .Setup(_ => _.Find(It.IsAny<object>()))
    .Returns((object arg) => {
        if(arg is Guid id)
            return DataList().FirstOrDefault(w => w.Id == id);
        return null;
    });
repositoryMock
.Setup(=>u.Find(It.IsAny()))
.返回((对象参数)=>{
if(arg是Guid id)
返回DataList().FirstOrDefault(w=>w.Id==Id);
返回null;
});
假设在期望表达式中使用了
It.IsAny()
,则模拟成员的定义为
IRepostory.Find(object id)

但是,如果定义是
IRepostory.Find(Guid id)
,则设置将略有不同

repositoryMock
    .Setup(_ => _.Find(It.IsAny<Guid>()))
    .Returns((Guid id) => DataList().FirstOrDefault(w => w.Id == id));
repositoryMock
.Setup(=>u.Find(It.IsAny()))
.Returns((Guid id)=>DataList().FirstOrDefault(w=>w.id==id));

函数
DataList()
返回什么?请检查更新如果要返回至少一个对象,则DataList()必须至少返回一个对象。并且必须处理这个
w=>w.Id==It.IsAny()
为什么不把
FirstOrDefault(…)
改成
FirstOrDefault()
?因为标准显然只是给出第一个元素,所以我需要测试所有可能的条件。有时Id会存在,有时则不存在。您希望基于不同的Id得到不同的结果吗?我希望返回具有特定Id的数据。因此,请使用
It.Is
It.IsAny
IRepository.Find([“159cd2b5-ab47-4006-9a47-C85E470E9B1]”调用失败,模拟行为严格。模拟上的所有调用都必须有相应的设置。将Find替换为FindAll