2010-03-18 18 views
0

我想開始使用單元測試,我想測試以下控制器:第一個測試崩潰使用MSTEST與ASP.NET MVC 1

公共類AjaxController:控制器 {

...

public JsonResult RateVideo(int userRating, long videoId) 
    { 

     string userName = User.Identity.Name; 

... }

}

我有一個創建的識別TestClass用下面的方法:

[TestMethod的 公共無效TestRateVideo()

{    

     //Arrange 
     AjaxController c = new AjaxController(); 

     //Act 
     JsonResult jr = c.RateVideo(1, 1); 



     //Assert 
     //Not implemented yet 

    } 

我選擇調試和運行測試。當代碼到達第一條語句時:

string username = User.Identity.Name;

調試停止,我收到一條消息,說測試失敗。

任何指導,你可以提供將不勝感激。

+0

請格式化源代碼 –

回答

0

測試控制器最常見的問題是使用依賴於HttpContext的函數。 用戶屬性的實現是這樣的:

public IPrincipal get_User() 
{ 
    if (this.HttpContext != null) 
    { 
     return this.HttpContext.User; 
    } 
    return null; 
} 

正如你所看到的,用戶會因爲HtppContext還沒有被初始化,並呼籲.Identity會拋出異常返回null。 幸運的是,MVC允許您設置ControllerContext屬性,以便您可以使用模擬的HttpContext創建自己的實例。

MVCContrib項目有一些測試助手。您可以使用MVCContrib.TestHelper.dll中的TestControllerBuilder在您的測試類中使用模擬上下文構建您的控制器。