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,并且您将类视图传递给 您的视图模型,您的代码将编译,将导致运行时 错误,如下所示。

如果你测试的东西不止这个,你的控制器做的太多了。