2016-01-26 14 views
3

當我的控制器正常運行時,將填充RouteData。但是當我運行或調試測試時,RouteData爲空。 ASP.NET MVC5。通過單元測試調用時,MVC RouteData在控制器中爲空

控制器

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var controller = this.RouteData.Values["controller"]; // null ref exception 
     var action = this.RouteData.Values["action"]; 
     var id = this.RouteData.Values["id"]; 
     ViewBag.Message = string.Format("{0}::{1} {2}", controller, action, id); 
     return View(); 
    } 

測試

[TestClass] 
public class HomeControllerTest 
{ 
    [TestMethod] 
    public void Index() 
    { 
     HomeController controller = new HomeController(); 
     ViewResult result = controller.Index() as ViewResult; 
     Assert.AreEqual(false, string.IsNullOrWhiteSpace(result.ViewBag.Message)); 
    } 

這個預期?這是因爲在測試直接實例化時,路由引擎不參與調用控制器嗎?

回答

2

是的,它是預期的。控制器依靠RequestContext獲取RouteData,並且僅在created on the mvc pipelinecontroller request begins to execute之後「準備就緒」。這不會發生,當你簡單地new他們。

你可以做的是new手動上塊(即ControllerContext,RouteData等)或嘲笑他們,然後在控制器上設置這些屬性進行測試。

+0

嘿!我遇到了同樣的問題。 @Shoe你是什麼意思的「新件」? –

+0

@AjayAradhya例如像'new RouteData()'的東西。 – Shoe

+0

工作..謝謝! –

相關問題