1

我有一個控制器的方法 - CurrentValues綜合單元測試的方法

[HttpGet] 
public ActionResult CurrentValues(ValueRetrieverViewModel valueRetrieverModel) 
{ 
    int page = 0; 
    if(!string.IsNullOrEmpty(valueRetrieverModel.Page)) 
    { 
     int.TryParse(valueRetrieverModel.Page, out page); 
    } 

    if (page <= 0) page = 1; 

    var values = GetValues(page); 

    if (values != null) 
    { 
     if (values.QueryResults.Count > 0) 
     { 
      ViewData["name"] = valueRetrieverModel.Name; 
      ViewData["school"] = valueRetrieverModel.School;    
      ViewData["team"] = valueRetrieverModel.Team; 
     } 
    } 

    var valRtrvrViewModel = new ValuesViewModel 
    { 
     Results = values, 
     InputParms = valueRetrieverModel 
    }; 

    return View("CurrentValues", searchViewModel); 
} 

我想有這個控制器全面單位利用MS-VS-單元測試套件,如果需要,起訂量過測試。

該方法的核心是從 - GetValues(page)檢索到的值。

  1. 我可以寫些什麼測試來對此方法進行全面的單元測試? 示例代碼將與測試場景一起幫助。
  2. 如何使用Moq來模擬ValueRetrieverViewModel?我應該還是可以將Moq用於此處的任何其他目的?
+0

試圖全面測試一種方法傾向於產生較差的投資回報(ROI)。我會建議考慮你想驗證什麼,而不是試圖對每個案例進行單元測試。 – 2013-04-05 19:21:35

回答

3

以下文章在詳細解釋測試控制器時應編寫的所有測試(包括何時使用模擬框架)方面非常出色。它也很短。從文章 http://www.arrangeactassert.com/how-to-unit-test-asp-net-mvc-controllers/

摘錄:

讓我通過討論,你應該是什麼類型的單元測試 創建MVC控制器開始。測試以檢查控制器操作返回的正確操作結果 。這包括有關 操作結果的信息,如測試正確視圖返回 以查看結果。

測試以檢查視圖模型是否您期望。如果您有一個 強類型視圖,它需要class foo,並且您將類視圖傳遞給 您的視圖模型,您的代碼將編譯,將導致運行時 錯誤,如下所示。

如果你測試的東西不止這個,你的控制器做的太多了。