Я занимаюсь созданием ASP.NET Core WebAPI и пытаюсь написать модульные тесты для контроллеров. Большинство примеров, которые я нашел, относятся к более старым платформам WebAPI / WebAPI2 и, похоже, не коррелируют с новыми контроллерами Core.
Мои методы контроллера возвращают IActionResults
. Однако объект IActionResult
имеет только метод ExecuteResultAsync()
, который требует контекста контроллера. Я создаю экземпляр контроллера вручную, поэтому контекст контроллера в этом экземпляре равен нулю, что вызывает исключение при вызове ExecuteResultAsync
. По сути, это ведет меня по очень хитрому пути к успешному завершению этих модульных тестов, и это очень беспорядочно. Я остаюсь в недоумении, что должен быть более простой / правильный способ тестирования контроллеров API.
Кроме того, мои контроллеры НЕ используют async / await, если это имеет значение.
Простой пример того, чего я пытаюсь достичь:
Метод контроллера:
[HttpGet(Name = "GetOrdersRoute")]
public IActionResult GetOrders([FromQuery]int page = 0)
{
try
{
var query = _repository.GetAll().ToList();
int totalCount = query.Count;
int totalPages = (int)Math.Ceiling((double)totalCount / pageSize) - 1;
var orders = query.Skip(pageSize * page).Take(pageSize);
return Ok(new
{
TotalCount = totalCount,
TotalPages = totalPages,
Orders = orders
});
}
catch (Exception ex)
{
return BadRequest(ex);
}
}
Модульный тест:
[Fact]
public void GetOrders_WithOrdersInRepo_ReturnsOk()
{
// arrange
var controller = new OrdersController(new MockRepository());
// act
IActionResult result = controller.GetOrders();
// assert
Assert.Equal(HttpStatusCode.OK, ????);
}
GetOrders
. что вы возвращаете в этом методе. приведите результат к типу того, что вы возвращаете в методе, и выполните свое утверждение для этого. - person Nkosi   schedule 23.12.2016