Как правильно имитировать контекст контроллера для тестирования ViewResult.ExecuteResult ()?

Я пытаюсь создать интеграционные тесты, чтобы убедиться, что мои представления не содержат ошибок времени выполнения. Таким образом, мне нужно создать тест, который проверяет, правильно ли работает ViewResult.ExecuteResult () , но, похоже, я наткнулся на препятствие.

Я нашел этот сайт , который дал мне отправную точку, и у меня есть следующий код:

    [TestMethod]
    public void RegisterResultExecutes()
    {
        //arrange 
        RequestContext requestContext = new RequestContext(new MockHttpContext(), new RouteData());
        AccountController controller = new AccountController
        {
            FormsService = new MockFormsAuthenticationService(),
            MembershipService = new MockMembershipService(),
            Url = new UrlHelper(requestContext)
        };

        var result = controller.Register();
        var sb = new StringBuilder();
        Mock response = new Mock();
        response.Setup(x => x.Write(It.IsAny())).Callback(y =>
        {
            sb.Append(y);
        });
        Mock controllerContext = new Mock();
        controllerContext.Setup(x => x.HttpContext.Response).Returns(response.Object);

        //act 
        result.ExecuteResult(controllerContext.Object);
    }

Проблема в том, что когда вызывается result.ExecuteResult () , я получаю следующее исключение

System.NullReferenceException: Object reference not set to an instance of an object.

System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
MyApp.Tests.Controllers.AccountControllerTest.RegisterResultExecutes() in C:\Users\KallDrexx\Documents\Projects\MyApp\MyApp.Tests\Controllers\AccountControllerTests.cs: line 297

К сожалению, эта трассировка стека не очень полезна, так как я не уверен, что она пытается получить доступ, что является нулевым. Есть ли у кого-нибудь предложения, как я могу создать тест для ExecuteResult () ?

6
задан KallDrexx 17 May 2011 в 02:30
поделиться