Итак, у меня есть контроллер ItemsController, для которого я должен создать пример модульного теста в NUnit.
Но я понятия не имею, как заставить его работать, поскольку он расширяет базовый контроллер, который имеет только метод get и не имеет сеттера, поэтому любой запускаемый мной тест выдает ошибку, потому что «Контейнер» имеет значение null. Я не могу создать метод Set, потому что он обычно принимает значение из URL-адреса.
Как передать URL, если это возможно, в мои тестовые примеры? Как убедиться, что URL-адрес подделан правильно? Или у кого-нибудь есть лучший подход / предложение?
public class BaseController : Controller
{
protected string Container
{
get
{
var cont = this.RouteData.Values["container"] as string;
return cont;
}
}
}
public class ItemsController : BaseController
{
private IItemsServiceRepository _esc;
public ItemsController(IItemsServiceRepository esc)
{
_esc = esc;
}
[HttpGet]
public IActionResult GetItems()
{
var items = _esc.GetItems(Container);
var results = new List<ItemDb>();
foreach (var item in items)
{
results.Add(new ItemDb
{
Title = item.Title,
Type = "TBD",
Uri = "TBD"
});
}
return Ok(results);
}
}
Я бы показал вам свой модульный тест, но сейчас все в беспорядке.
Дайте мне знать, если вам понадобится дополнительная информация.
Примечание: Может кто подскажет, как это дубликат? Пока ссылка на ту, дубликат которой я считал, не помогла. Некоторое объяснение предпочтительнее, так как я новичок в TDD.
@CodeCaster Моя маршрутизация обычно выполняется после этого объяснения ссылка на сайт Повлияет ли это на подход / ответ на указанный вами вопрос, дубликатом которого я являюсь?
Ваше редактирование, требующее дублирования "совсем не помогло", должно быть расширено тем, что вы пробовали.





Настройте RouteData, передайте его в ControllerContext и назначьте этот контекст своему контроллеру. Смотрите дубликат.