在MVC

2013-10-14 46 views
0

編寫單元測試的自定義視圖引擎我創建了一個視圖引擎(用於臺式機,平板電腦,IPhone):在MVC

public ViewEngine() 
{ 
    Set 3 Locations 
}; 

public override ViewEngineResult FindView(ControllerContext controllerContext, 
              string viewName, string masterName, bool useCache) 
{ 
    Assign view locations... 
} 

然後,我創建了一個單元測試類:

[Test] 
public void Test_IPad_UserAgent() 
{ 
    var controllerContext = new Mock<ControllerContext>(); 
    var controller = new PaymentController(); 

    controllerContext.SetupGet(p => p.HttpContext.Request.UserAgent).Returns("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10"); 

    controller.ControllerContext = controllerContext.Object; 
    var result = controller.Index() as ViewResult; 
    var viewData = result.ViewData; 

} 

我的問題是,如何編寫一個斷言來檢查我的視圖引擎是否爲不同的UserAgent字符串返回正確的視圖?

我很高興爲ViewEngine提供完整的代碼如果有人樂意幫助我。

回答

0

您可以檢查ViewEngineCollection屬性以找到適合您的ViewEngine。嘗試是這樣的:

Assert.IsInstanceOf<MyCustomViewEngine>(result.ViewEngineCollection.First()); 

如果你需要測試任何超出該視圖引擎的類型,如返回所述實際觀看,我建議您通過您的自定義視圖引擎提供這樣的信息,在你的FindView方法。例如,您可以在ViewData中提供一些信息,並在您的測試中檢查該信息。例如:

view.ViewData.Add("path", "MyCustomPath/" + partialViewName; 

參考這個問題的更多信息爲什麼這是必要的:Get View Name where ViewResult.ViewName is empty string for Unit Testing