Можно ли выполнить модульное тестирование некоторых результатов AddModelError в ASP.NET MVC? - PullRequest
8 голосов
/ 06 апреля 2009

У меня есть метод контроллера, который возвращает RedirectToActionResult (успех!) Или ViewResult (сбой с сообщениями об ошибках).

Если бизнес-логика не работает , я добавляю сообщения об ошибках в свойство AddModelError.

Есть ли способ проверить это в моих тестах MS Unit? У меня также есть Moq, если это тоже помогает. (хотя я не верю, что Moq требуется для этого сценария) .. Я не использую ничего из Request объекта.

Ответы [ 2 ]

7 голосов
/ 06 апреля 2009

Да, разобрался.

// Arrange.
// .. whatever ..

// Act.
var viewResult = controller.Create(new Post()) as ViewResult;

// Assert.
Assert.IsNotNull(viewResult);
Assert.IsNotNull(viewResult.ViewData.ModelState["subject"]);
Assert.IsNotNull(viewResult.ViewData.ModelState["subject"].Errors);
Assert.IsTrue(viewResult.ViewData.ModelState["subject"].Errors.Count == 1);
6 голосов
/ 03 декабря 2012

Вы можете (также) протестировать контроллер напрямую (без проверки вида) следующим образом:

// Arrange.
// .. 

// Act.
controller.Create(new Post());  // missing UserName will invalidate Model with "Please specify your name" message

// Assert
Assert.IsTrue(! controller.ModelState.IsValid);
Assert.IsTrue(  controller.ModelState["UserName"].Errors.Any( modelError => modelError.ErrorMessage == "Please specify your name"));
...