Используя Moq, я пытаюсь настроить метод для возврата чего-либо в зависимости от аргумента. Итак, если вы проходите argument1, вы получите result1 назад, и если вы проходите argument2 вы получите result2:Настройки и закрытие Moq
var obj = "";
var propertyMock1 = new Mock<PropertyInfo>();
var propertyMock2 = new Mock<PropertyInfo>();
var result1 = "";
var result2 = "";
var factoryMock = new Mock<IFactory>();
factoryMock.Setup(f => f.Create(obj, propertyMock1.Object)).Returns(result1);
factoryMock.Setup(f => f.Create(obj, propertyMock2.Object)).Returns(result2);
Однако, когда я называю factoryMock.Object.Create(obj, propertyMock1.Object)
, возвращаемое значение является null
. Если я пройду propertyMock2.Object
, он будет работать как ожидалось.
Я понятия не имею, почему первая установка не работает.
ReSharper дает мне несколько советов, хотя я не понимаю. В первой настройке он говорит «Неявно зафиксированное закрытие: свойство2», а во второй настройке он говорит «Неявно зафиксированное закрытие: свойство1».
Почему каждый лямбда должен захватывать другой аргумент лямбды? Как они связаны? И почему первая настройка не работает?
Уверены ли вы, что вы точно связаны с кодом, который вы вставили? Например, в вашем коде нет «свойства2». – BartoszKP
Как вы называете метод 'Create()'? Не похоже, чтобы какой-либо проект имел тот же самый издеваемый класс, который был вызван с помощью двух разных значений, издевавшихся над тестируемым кодом. У вас есть инсталляция конструктора, которая проходит в последовательности или массиве или двух бок о бок PropertyInfos? См. Мой ответ ниже для возможного решения. –
@BartoszKP: Плохо, я имел в виду «propertyMock2». – dcastro