簡體   English   中英

返回正確結果的最小起訂量設置方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM