используя Moq - пустой тип возвращаемого значения Юнит тест - PullRequest
1 голос
/ 16 ноября 2011

Я пишу unittest для метода void, фактически этот метод загружает коллекцию в методе ViewData ["CityList"]:

 public void PopulateCityCombo() {
            IEnumerable<Cities> c= service.GetCities();
           ViewData["CityList"] = c.Select(e => new Cities{ ID = e.ID, Name = e.Name});
        }

Теперь я не знаю, как выполнить модульное тестирование с использованием Moq, поскольку метод контроллера является пустыми не возвращая данные, кто-нибудь может сказать, что я достигну этого.

1 Ответ

3 голосов
/ 16 ноября 2011

Кстати, я бы не стал использовать ViewData в методах контроллера, как в вашем примере.Подход словаря ViewData является быстрым и довольно простым в реализации, однако он может привести к опечаткам и ошибкам, которые не обнаруживаются во время компиляции.Альтернативой может быть использование шаблона ViewModel, который позволяет вам использовать строго типизированные классы для конкретного представления, в котором вам необходимо представить значения или содержимое внутри.В конечном итоге вы получаете проверку типов и время компиляции вместе с intellisense.

Переключение на шаблон ViewModel позволит вам вызвать метод PopulateCityCombo () из вашего контроллера для заполнения ViewModel, которая, в свою очередь, будет передана в соответствующее представление,

Оттуда вам нужно будет добавить фиктивный сервисный слой в конструктор ваших контроллеров из вашего модульного теста.

// arrange
var mock = new Mock<servicelayer>();
mock.Setup(x=>x.GetCities()).Returns(expectedData);

var controller = new YourController(mock.Object);

// act
var result = controller.ControllerMethod() as ViewResult;
var resultData = (YourViewModel)result.ViewData.Model;

// assert
// Your assertions
...