контроллер модульного тестирования - PullRequest
3 голосов
/ 22 июня 2011

У меня очень простой сценарий:

[HttpGet]
public ActionResult CreateUser()
{
    return View();
}

[HttpGet]
public ActionResult Thanks()
{
    return View();
}

[HttpPost]
public ActionResult CreateUser(CreateUserViewModel CreateUserViewModel)
{
    if (ModelState.IsValid)
    {
    return View("Thanks");
    }

    return View(CreateUserViewModel);
}

Мой модульный тест использует testhelper из mvc contrib:

[Test]
public void UserController_CannotCreateUserWithNoLastName()
{
    // arrange
    UsersController UsersController = new UsersController();
    CreateUserViewModel CreateUserViewModel = new CreateUserViewModel();
    CreateUserViewModel.LastName = "";

    // act
    ActionResult result = UsersController.CreateUser(CreateUserViewModel);

    // assert
    result.AssertViewRendered().ForView("CreateUser");
}

Когда я открываю браузер и пытаюсь отправить неверного пользователя (без фамилии), он перенаправляет на форму createuser, но модульный тест не проходит (он говорит, что перенаправляет на благодарности) Почему это? Кто-нибудь может увидеть что-то не так? Спасибо!

Ответы [ 2 ]

7 голосов
/ 22 июня 2011

Внутри вашего модульного теста вы должны смоделировать, что ваша модель имеет ошибку, потому что это то, что вы хотите проверить (путь ошибки).В вашем тесте модель действительна, поэтому она перенаправляет вас в представление «Спасибо».Чтобы смоделировать ошибку, вы можете сделать это в модульном тесте перед разделом «act»:

UsersController.ModelState.AddModelError("username", "Bad username"); 

Посмотрите на этот пример: http://www.thepursuitofquality.com/post/53/how-to-test-modelstateisvalid-in-aspnet-mvc.html

Подробнее о методе AddModelError здесь: http://msdn.microsoft.com/en-us/library/system.web.mvc.modelstatedictionary.addmodelerror.aspx

3 голосов
/ 22 июня 2011

Я полагаю, что вы используете DataAnnotations для LastName пустым, поэтому проверка будет выполняться ModelBinder.Модульный тест пропустит ModelBinder и проверку.

См. Этот SO вопрос для получения дополнительной информации - вызовите UpdateModel на контроллере вручную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...