如何测试该操作使用参数?

时间:2014-08-23 09:48:57

标签: c# asp.net-mvc unit-testing tdd

我应该使用测试驱动开发,但在这种特殊情况下,由于遇到问题,我首先实现了action方法。它看起来像这样:

public ViewResult Index(int pageNumber = 1)
{
    var posts = repository.All();
    var model = new PagedList<Post>(posts, pageNumber, PageSize);

    return View(model);
}

存储库和PagedList<>都已经过测试。现在我想验证当给予操作页码时实际考虑页码。

private Mock<IPostsRepository> repository;
private HomeController controller;

[Test]
public void Index_Doohickey()
{
    var actual = controller.Index(2);

    // .. How do I test that the controller actually uses the page number here?
}

1 个答案:

答案 0 :(得分:3)

我猜你正在使用这个页面列表nuget? https://github.com/troygoode/PagedList/ 该组件有一个方法来获取一些元数据,然后具有当前页码的属性。

https://github.com/troygoode/PagedList/blob/master/src/PagedList/PagedListMetaData.cs

您在测试中可能需要做的是检查View中的模型(您的实际变量)。 将actual投射到ViewResult以获取您的模型。

e.g。

ViewResult actual = controller.Index(2) as ViewResult;

// not 100% sure about the code below, I didn't tried it out
var list = actual.Model as PagedList<Post>;
var pgNumber = list.GetMetaData().PageNumber // <- assert this

您还可能需要模拟存储库以返回一个或多个元素。如果列表为空,不知道这个视图列表的行为是什么......