Настройка Moq с функцией, которая принимает список объектов, как определить идентификаторы объектов, которые могут быть приняты? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть сервис ниже Moq.Одна из функций принимает различные параметры, но одна из них - List<MyObject>, где MtObject имеет Id.Я попытался определить фактический объект, который Moq должен принять для того, чтобы вернуть то, что я хочу вернуть для этого объекта, но он не работает - ничего не возвращается - мне интересно, если это так, потому что предоставленный объект неточный объект, используемый при вызове службы Moq - поэтому я попытался указать MyObject.Id в настройке, но не могу понять, как это сделать.

Это был мой оригинал:

myService.Setup(s => s.GetSomeStuff(
    It.IsAny<Reference>(),
    new List<MyObject>() { fakeMyObject1, fakeMyObject2 },
    anotherThing,
    number))
.Returns(MyResponse).Verifiable();

Вышеприведенное возвращает null, если я использую It.IsAny<List<MyObject>>(), тогда я получаю ответ, но мне нужно иметь другой ответ на основе переданного MyOject.

Что быЯ заменяю эту строку на, чтобы указать fakeObject1.Id и fakeObject2.Id, а не объект?

new List<MyObject>() { fakeMyObject1, fakeMyObject2 }

Или вы думаете, что оригинальное решение должно работать?Или есть другая альтернатива?

1 Ответ

0 голосов
/ 24 мая 2018

Мне интересно, если это так, потому что предоставленный объект не является точным объектом, который используется, когда мы вызываем службу Moq

Это правильно.Поскольку экземпляры аргументов не совпадают с имитацией, они не будут вести себя должным образом.

Используйте сопоставитель аргументов It.Is<T>() с предикатом, чтобы соответствовать желаемым идентификаторам

 myService.Setup(_ => _.GetSomeStuff(
    It.IsAny<Reference>(),
    It.Is<List<MyObject>>(x => 
        x.Any(y => y.Id == fakeObject1.Id || y.Id == fakeObject2.Id) //<-- or something else
    ),
    anotherThing,
    number))
.Returns(MyResponse)
.Verifiable();

Ссылка Быстрый запуск Moq: Соответствующие аргументы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...