我应该使用测试驱动开发,但在这种特殊情况下,由于遇到问题,我首先实现了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?
}
答案 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
您还可能需要模拟存储库以返回一个或多个元素。如果列表为空,不知道这个视图列表的行为是什么......