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-Unit 测试套件和如果需要 Moq 对这个控制器进行全面的单元测试。

此方法的核心是从 - 检索到的值GetValues(page)

  1. 我可以编写哪些测试来对此方法进行全面的单元测试?示例代码将与测试场景一起提供帮助。
  2. 如何使用 Moq 模拟 ValueRetrieverViewModel?我应该或我可以将起订量用于这里的任何其他目的吗?
4

1 回答 1

3

以下文章非常出色地详细解释了在测试控制器时应编写的所有测试,包括何时使用模拟框架。它也很短。 http://www.arrangeactassert.com/how-to-unit-test-asp-net-mvc-controllers/

文章摘录:

让我首先讨论应该为 MVC 控制器创建哪些类型的单元测试。用于检查正确操作结果的测试从控制器操作返回。这包括有关操作结果的信息,例如针对视图结果返回正确视图的测试。

测试以检查视图模型是否符合您的预期。如果您有一个需要类 foo 的强类型视图,并且您将类 bar 传递给您的视图模型,您的代码将编译,将导致运行时错误,如下所示。

如果您正在测试比这更多的东西,那么您的控制器做的太多了。

于 2013-04-05T17:54:50.863 回答