Я должен использовать тестовую разработку, но в этом конкретном случае, поскольку у меня возникают проблемы, я сначала применил метод действия. Это выглядит так:
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?
}
Я предполагаю, что вы используете этот pagelist nuget? https://github.com/troygoode/PagedList/ У компонента есть метод для получения некоторых метаданных, которые затем имеют свойство для текущего номера страницы.
https://github.com/troygoode/PagedList/blob/master/src/PagedList/PagedListMetaData.cs
Что вам нужно сделать в своем тесте - это проверить модель в представлении (ваша фактическая переменная). ViewResult
actual
в ViewResult
чтобы получить свою модель.
например
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
Возможно, вам также придется издеваться над хранилищем, чтобы вернуть еще одно количество элементов. Не знаю, как ведет себя эта вещь в списке, если список пуст...