2010-09-10 31 views
1

我正在使用MvcContrib和TestControllerBuilder爲我的控制器編寫測試。使用TestControllerBuilder返回特定的UserHostAddress

我寫,看起來像這樣爲我的錯誤處理控制器測試:

public JsonResult HttpError() 
    { 
     Exception ex = null; 

     try 
     { 
      ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()]; 
     } 
     catch 
     { 
     } 

     if(ex != null) 
     { 
      return Json(new ErrorViewModel() { Message = ex.Message, Source = ex.Source, StackTrace = ex.StackTrace, Type = ex.GetType().Name}, JsonRequestBehavior.AllowGet); 
     } 
     else 
     { 
      return Json(new ErrorViewModel() { Message = "An error has occured." }, JsonRequestBehavior.AllowGet); 
     } 
    } 

基本上,我的全局錯誤處理提出的最後一個異常到應用程序商店,這個控制器試圖把它拉回來了,將其轉換爲Json並返回它(我們將所有內容都返回爲Json,因爲這些方法僅作爲Web服務調用)。

爲了完全測試這個,我需要爲UserHostAddress包含可預測的內容,但由TestControllerBuilder設置的對象將該屬性留空。

我該如何做這項工作?我不確定如何在測試中完成這項工作。

回答

4

TestControllerBuilder使用Rhino.Mocks來模擬HttpContext。知道了這一點,你可以把Request對象返回到「記錄」模式和存根出響應:

controller.Request.BackToRecord(); 
controller.Request.Stub(r => r.UserHostAddress).Return("75.142.12.45"); 
controller.Request.Replay(); 

做到這一點,你已經初始化控制器後,但你的方法調用之前。