SetupGet с несколькими обратными вызовами
Пожалуйста, смотрите код ниже:
mockBusinessLayer.Setup(m => m.Calculate(It.IsAny<integer>(), It.IsAny<integer>())).Callback
(() => mockBusinessLayer.SetupGet(y => y.FirstNumber).Returns(Helper.FirstNumber));
mockBusinessLayer.Setup(m => m.Calculate(It.IsAny<integer>(), It.IsAny<integer>())).Callback
(() => mockBusinessLayer.SetupGet(y => y.SecondNumber).Returns(Helper.SecondNumber));
Calculate () принимает два целых числа и складывает их вместе. Как настроить несколько SetupGets для одного и того же объекта? Приведенный выше код только устанавливает обратный вызов Get для SecondNumber (потому что это последний раз, когда вызывается SetupGet).
Обновить
Это функция, которую я пытаюсь проверить:
public CalculatorDTO Calculate(int NumberOne, int NumberTwo)
{
_Calculator.Calculate(NumberOne, NumberTwo);
return Mapper.Map<CalculatorDTO>(_changeCalculator);
}
}
Это лучше сделать это:
mockBusinessLayer.Setup (x => x.FirstNumber).Returns (Helper.FirstNumber); mockBusinessLayer.Setup (x => x.SecondNumber).Returns (Helper.SecondNumber);
1 ответ
Ты говоришь:
Приведенный выше код только устанавливает обратный вызов Get для SecondNumber (потому что это последний раз, когда вызывается SetupGet).
Но это не совсем правильно: ваши звонки Setup
из Calculate
идентичны и, таким образом, второй переопределяет первый. Это как будто первый Setup
никогда не происходило
Ввод звонков на SetupGet
в Callback
ненужно и сбивает с толку. Я бы настроил это так:
mockBusinessLayer.SetupGet(y => y.FirstNumber).Returns(Helper.FirstNumber)
mockBusinessLayer.SetupGet(y => y.SecondNumber).Returns(Helper.SecondNumber)
mockBusinessLayer.Setup(m => m.Calculate(It.IsAny<integer>(), It.IsAny<integer>()));
В любой момент FirstNumber
получено, оно вернется Helper.FirstNumber
и аналогично для SecondNumber
возврате Helper.SecondNumber
,
Все это, как говорится, без вашего кода (какой тип _Calculator
? Ваш mockBusinessLayer
действительно разоблачить FirstNumber
/SecondNumber
а также Calculate
?) Трудно предложить более полные шаги для продвижения вперед. Например, вы не показываете настройки вашего Mapper.Map
метод, который вам понадобится, если вы хотите проверить этот метод.
В ответ на ваше обновление...
SetupGet
предлагает немного более чистый API: вы должны пройти Func
, в то время как Setup
позволит вам пройти Action
; он возвращает немного более ограниченный ISetupGet
интерфейс. SetupGet
также имеет лучшую семантику, указывая читателям, что вы намерены настроить только get.
В исходном коде Moq они фактически сводятся к одному и тому же коду, поэтому либо выполняйте работу так же хорошо.