Первые тестовые сбои с использованием MSTEST с ASP.NET MVC 1 - PullRequest
0 голосов
/ 18 марта 2010

Я пытаюсь начать использовать модульное тестирование и хочу проверить следующий контроллер:

публичный класс AjaxController: контроллер {

...

    public JsonResult RateVideo( int userRating, long videoId )
    {

        string userName = User.Identity.Name;

... }

}

У меня есть созданный TestClass с помощью следующего метода:

[TestMethod public void TestRateVideo ()

    {            

        //Arrange
        AjaxController c = new AjaxController();

        //Act
        JsonResult jr = c.RateVideo(1, 1);



        //Assert
        //Not implemented yet

    }

Я выбираю отладку и запускаю тест. Когда код достигает 1-го утверждения:

строка username = User.Identity.Name;

Отладка прекращается, и мне выдается сообщение о том, что тест не пройден.

Будем благодарны за любые рекомендации, которые вы можете предложить.

1 Ответ

0 голосов
/ 18 марта 2010

Самая распространенная проблема тестирования контроллеров - это использование функций, использующих HttpContext. Реализация свойства User выглядит примерно так:

public IPrincipal get_User()
{
    if (this.HttpContext != null)
    {
        return this.HttpContext.User;
    }
    return null;
}

Как видите, пользователь вернет значение null, поскольку HtppContext не был инициализирован и вызов .Identity вызовет исключение. К счастью, MVC позволяет вам установить свойство ControllerContext, чтобы вы могли создать свой собственный экземпляр с поддельным HttpContext.

В проекте MVCContrib есть несколько помощников по тестированию. Вы можете использовать TestControllerBuilder в MVCContrib.TestHelper.dll для создания ваших контроллеров в ваших тестовых классах с поддельным контекстом.

...