Как вызвать метод Initialize при попытке юнит-теста? - PullRequest
2 голосов
/ 21 сентября 2009

У меня есть переопределение ниже, чтобы сделать несколько вещей с куки, используя объект FormsIdentity. Но когда я создаю экземпляр контроллера в модульном тестировании, этот метод не запускается. Есть идеи как это сделать?

   protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        // Grab the user's login information from FormsAuth
        _userState = new UserState();
        if (this.User.Identity != null && this.User.Identity is FormsIdentity)
            this._userState.FromString(((FormsIdentity)this.User.Identity).Ticket.UserData);

        // have to explicitly add this so Master can see untyped value
        this.UserState = _userState;
        //this.ViewData["ErrorDisplay"] = this.ErrorDisplay;

        // custom views should also add these as properties
    }

1 Ответ

3 голосов
/ 21 сентября 2009

Controller.Initialize(RequestContext) вызывается внутри ControllerBase.Execute(RequestContext), что, в свою очередь, может быть вызвано явной реализацией IController.Execute(RequestContext), поэтому этот код инициализирует и выполняет контроллер:

IController controller = new TestController();
controller.Execute(requestContext);

Я проанализировал дерево зависимостей для Initialize() и не вижу другого способа вызова этого метода без обращения к Reflection. Вам также нужно будет создать RequestContext, переданный Execute(), что проще, так как похоже, что вы используете Moq:

var wrapper = new HttpContextWrapper(httpContext);
var requestContext = new RequestContext(wrapper, new RouteData());

Эта ссылка содержит полезные сведения о насмешке над HttpContext с использованием Moq.

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