Модуль MVC moq тестирует объект перед RedirecToAction () - PullRequest
0 голосов
/ 06 октября 2009

Я хочу проверить данные внутри объекта "item", прежде чем они будут перенаправлены на другое действие.

     public ActionResult WebPageEdit(WebPage item, FormCollection form)
    {
        if (ModelState.IsValid)
        {

            item.Description = Utils.CrossSiteScriptingAttackCheck(item.Description);
            item.Content = Utils.CrossSiteScriptingAttackCheck(item.Content);
            item.Title = item.Title.Trim();
            item.DateUpdated = DateTime.Now;

           // Other logic stuff here

            webPagesRepository.Save(item);


            return RedirectToAction("WebPageList");
        }

Вот мой метод испытаний:

[Test]
    public void Admin_WebPageEdit_Save()
    {

        var controller = new AdminController();

        controller.webPagesRepository = DataMock.WebPageDataInit();
        controller.categoriesRepository = DataMock.WebPageCategoryDataInit();

        FormCollection form = DataMock.CreateWebPageFormCollection();


        RedirectToRouteResult actionResult = (RedirectToRouteResult)controller.WebPageEdit(webPagesRepository.Get(1), form);
        Assert.IsNotNull(actionResult);

        Assert.AreEqual("WebPageList", actionResult.RouteValues["action"]);


        var item = ((ViewResult)controller.WebPageEdit(webPagesRepository.Get(1), form)).ViewData.Model as WebPage;

        Assert.NotNull(item);



        Assert.AreEqual(2, item.CategoryID);




    }

Ошибка в этой строке:

var item = ((ViewResult)controller.WebPageEdit(webPagesRepository.Get(1), form)).ViewData.Model as WebPage;

Я думаю о том, есть ли способы протестировать объект "item" перед его перенаправлением на другие действия?

1 Ответ

0 голосов
/ 22 октября 2009

Причина, по которой вы потерпели неудачу, как вы, вероятно, знаете, состоит в том, что действие вашего контроллера никогда не возвращает ViewResult, только RedirectToRouteResult (при условии, что вы не указали какой-либо путь к коду). Вы можете вернуть ViewResult в действии, на которое вы перенаправляете, но здесь вы не тестируете это действие.

Лучший способ выяснить и проверить состояние вашего объекта элемента перед перенаправлением - это его взаимодействие с методом Save () вашего объекта webPagesRepository. Предположительно, из названия метода test вы хотите проверить, что этот метод на самом деле вызывается в любом случае. Поэтому у вас должно быть ожидание от метода Save (). В рамках этого ожидания вы можете проверить и подтвердить состояние объекта item, который ему передан. Это предполагает, что ваш webPagesRepository является ложной зависимостью.

Я пользователь Rhino Mocks и знаю только, как настроить ожидание с помощью этого API. Дайте мне знать, если вы все же найдете это полезным, и я опубликую его.

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