Модель не проверяется автоматически при модульном тестировании - PullRequest
4 голосов
/ 09 декабря 2010

Вот часть действия контроллера:

[HttpPost]
public ActionResult NewComplaint(Complaint complaint)
{
    if(!ModelState.IsValid)
    {
        // some code
    }
    // some more code...
}

При запуске приложения модель автоматически проверяется еще до вызова оператора if.Однако при попытке модульного тестирования этого кода автоматическая проверка не происходит.

Если бы вместо этого я использовал FormCollection и вызвал TryUpdateModel, проверка могла бы произойти, но я не хочу использовать это.

Я обнаружил, что вызов TryValidateModel (model) доесли утверждение работает вокруг проблемы хорошо;требуется только одна дополнительная строка кода.Я бы предпочел избавиться от этого как бы то ни было.

Любые идеи, почему автоматическая проверка не происходит при модульном тестировании, но происходит, когда приложение работает?

РЕДАКТИРОВАТЬ: Забыл упомянуть, я использую ASP.NET MVC3 RC1 и я 'm издевается над объектом HTTPContext контроллера, если это имеет какое-либо значение

1 Ответ

4 голосов
/ 09 декабря 2010

Проверка происходит во время привязки модели (а TryUpdateModel выполняет привязку модели).

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

Вы должны предположить, что эта часть просто работает (потому что мы тщательно ее тестируем) и только тестировать код вашего приложения. Таким образом, в этом случае единственное, что вам нужно смоделировать, это возвращаемое значение ModelState.IsValid, и вы можете сделать это, добавив ошибку проверки вручную:

ModelState.AddModelError("some key", "some error message")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...