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 они фактически сводятся к одному и тому же коду, поэтому либо выполняйте работу так же хорошо.

Другие вопросы по тегам