C# 返回正确结果的Moq设置方法
需要帮助可以这样管理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=
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