Метод установки Moq для возврата правильного результата - PullRequest
0 голосов
/ 22 января 2020

Нужна помощь, возможно ли управлять настройкой Moq следующим образом

repositoryMock.Setup(s => s.Find(It.IsAny<object>())).Returns(() => DataList().FirstOrDefault(w => w.Id == It.IsAny<Guid>()));

Почему я спрашиваю, потому что с этой настройкой я всегда получаю возвращаемый ноль, но если я только поставлю, чтобы вернуть DataList (). FirstOrDefault (), он правильно возвращает первый элемент в списке. Мой вопрос заключается в том, как я могу управлять DataList с помощью «n» элементов, где нужный мне элемент будет посередине и когда запускается фиктивная установка для возврата, если элемент существует?

Updates

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;
    }

С уважением,

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Захват переданного аргумента в делегате 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) при использовании It.IsAny<object>() в выражение ожидания.

Если, однако, определение было IRepostory<T>.Find(Guid id), тогда установка будет немного другой

repositoryMock
    .Setup(_ => _.Find(It.IsAny<Guid>()))
    .Returns((Guid id) => DataList().FirstOrDefault(w => w.Id == id));
0 голосов
/ 22 января 2020

, если вы хотите вернуть хотя бы объект.

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