2009-10-05 2 views
0

Я хочу проверить данные внутри объекта «item», прежде чем перенаправить его на другое действие.Модуль MVQ moq проверяет объект перед RedirecToAction()

 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; 

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

+1

Пожалуйста, отредактируйте свой вопрос, чтобы включить: 1: Код, который может быть скомпилирован (не все коды кода WebPageEdit возвращают значение). 2: описание полученной вами ошибки. –

ответ

0

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

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

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

Смежные вопросы