Как я могу вызвать установку в Moq дважды в одном методе? - PullRequest
0 голосов
/ 12 июля 2011

У меня есть метод модульного теста, который должен смоделировать (заглушка?) Два вызова метода репозитория в классе, который я тестирую.Каждый пример, с которым я работал до сих пор, показывает один метод настройки для Mock, но теперь мне нужно два.

Пример:

_employeeRepositoryMock.Setup(e => e.GetEmployees())
            .Returns(new Employee[]
                     {
                        new Employee
                        {
                            Name = "John Doe"
                        }
                     });
_employeeRepositoryMock.Setup(e => e.UpdateEmployee(1)).Returns(true);

Assert.IsTrue(_employeeService.UpdateEmployeeRecords() > 0);
_employeeRepositoryMock.Verify(gr => gr.UpdateEmployee(1), Times.Exactly(1));

В этом примере мне нужно смоделировать два метода репозитория, оба из которых вызываются в "UpdateEmployeeRecords ()", но я не уверен, как.

Обновление

Поцарапайте весь этот вопрос - я упустил что-то простое.Я передавал неверное числовое значение для UpdateEmployee, что приводило к ошибке Assert.Вместо этого я изменил параметр в макете на It.IsAny, чтобы он прошел.

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Ваши методы настройки в порядке.Ваше Утверждение должно быть ошибочным по какой-то другой причине.Некоторые мысли:

  1. Вы пытались отладить свой тест, чтобы посмотреть, что происходит?
  2. Является ли 1 правильным значением для насмешки в вашем методе UpdateEmployee?
  3. (Прошу прощения, если это покровительственно, но я уже делал это раньше) Вы передаете свой макет своему сервису через _employeeRepositoryMock.Object?
0 голосов
/ 12 июля 2011

Вы можете сделать это таким образом, создав тип данных, которые должен возвращать метод (в моем случае List<int> и List<string>) и вернуть его, используя .Returns.Теперь всякий раз, когда вызывается метод DoSomething(), он возвращает мой список intResult в качестве проверяемых данных и список stringResult при вызове метода DoSomethingElseThatIsReallyCool():

//Test method
{
  List<int> intResult = new List<int>();
  intResult.Add(0);

  List<string> stringResult = new List<string>();
  stringResult.Add("test");

  _reposMock.Setup(r=>r.DoSomething()).Returns(intResult);
  _reposMock.Setup(r=>r.DoSomethingElseThatIsReallyCool()).Returns(stringResult);

  Assert.IsTrue(_reposMock.SomeMethod() > 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...