[英]Moq Setup Method to return correct result
需要幫助是否可以像這樣管理起訂量設置
repositoryMock.Setup(s => s.Find(It.IsAny<object>())).Returns(() => DataList().FirstOrDefault(w => w.Id == It.IsAny<Guid>()));
為什么我要問,因為在這個設置中我總是得到 return null,但如果我只把 return DataList().FirstOrDefault(),它正確地返回列表中的第一個元素。 我的問題是如何使用“n”個元素來管理 DataList,其中我需要的元素將位於中間,並且當元素存在時運行模擬設置以返回?
更新
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;
}
親切的問候,
如果你想至少返回一個對象。
repositoryMock.Setup(s => s.Find(It.IsAny<IBaseRepository>())).Returns(() => DataList().FirstOrDefault(w => w.Id == It.Is<Guid>()));
在Returns
委托中捕獲傳遞的參數並使用它來過濾列表
repositoryMock
.Setup(_ => _.Find(It.IsAny<object>()))
.Returns((object arg) => {
if(arg is Guid id)
return DataList().FirstOrDefault(w => w.Id == id);
return null;
});
這假定IRepostory<T>.Find(object id)
成員的定義是IRepostory<T>.Find(object id)
給定在期望表達式中使用It.IsAny<object>()
。
然而,如果定義是IRepostory<T>.Find(Guid id)
那么設置會略有不同
repositoryMock
.Setup(_ => _.Find(It.IsAny<Guid>()))
.Returns((Guid id) => DataList().FirstOrDefault(w => w.Id == id));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.