Как проверить, что действие использует аргумент?

1

Я должен использовать тестовую разработку, но в этом конкретном случае, поскольку у меня возникают проблемы, я сначала применил метод действия. Это выглядит так:

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?
}
Теги:
unit-testing
asp.net-mvc
tdd

1 ответ

3
Лучший ответ

Я предполагаю, что вы используете этот 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

Возможно, вам также придется издеваться над хранилищем, чтобы вернуть еще одно количество элементов. Не знаю, как ведет себя эта вещь в списке, если список пуст...

  • 0
    Я не использую эту библиотеку на самом деле. Я понимаю ваш ответ, хотя и посмотрю, смогу ли я заставить что-то работать, основываясь на том, как эта библиотека работает. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню