Этот контроллер не тестируется? - PullRequest
0 голосов
/ 09 ноября 2018

В своем нынешнем состоянии я не думаю, что смогу проверить его из-за зависимости от аутентификации пользователя (user.identity) и данных маршрута (RouteData.Values) , первоначальный план был чтобы проверить, возвращал ли он представление. Должен ли я пытаться смоделировать / подделать эти значения или не тестировать контроллер, подобный этому?

public IActionResult Index()
{

	BlogHomeVM vm = new BlogHomeVM();

	int skip = int.TryParse((string)this.RouteData.Values["skip"], out skip) ? skip : 0;
	int showPosts = 3;

	vm.PageTitle = "Async and wait";

	vm.totalPosts = _context.Posts.Where(y => y.PublishedFrom <= DateTime.Now).Count();

	vm.Posts = _context.Posts
	.Where(y => y.PublishedFrom <= DateTime.Now || User.Identity.IsAuthenticated)
	.OrderByDescending(x => x.DatePublished)
	.Skip(skip)
	.Take(showPosts)
	.ToList();

	vm.AllCats  = _context.PostCategory.ToList();
	vm.PageName = "Blog";
	vm.skip = skip;
	vm.showPosts = showPosts;

	return View(vm);
}

1 Ответ

0 голосов
/ 09 ноября 2018

Вы можете ввести IHttpContextAccessor в свой контроллер и использовать _httpContext.GetRouteData() и _httpContext.User, чтобы сделать его тестируемым.

Прочтите эту статью, чтобы понять, что тестировать и как писать тестируемый код - https://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...