Методы контроллера модульного тестирования, которые возвращают IActionResultC#

Место общения программистов C#
Ответить
Anonymous
 Методы контроллера модульного тестирования, которые возвращают IActionResult

Сообщение Anonymous »

Я занимаюсь созданием веб-API ASP.NET Core и пытаюсь написать модульные тесты для контроллеров. Большинство найденных мной примеров взяты из старых платформ WebAPI/WebAPI2 и, похоже, не коррелируют с новыми контроллерами Core.

Методы моего контроллера возвращают IActionResults

Мой метод контроллера возвращает IActionResults

код>. Однако объект IActionResult имеет только метод ExecuteResultAsync(), которому требуется контекст контроллера. Я создаю экземпляр контроллера вручную, поэтому контекст контроллера в этом экземпляре имеет значение null, что вызывает исключение при вызове 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, ????);
}


Подробнее здесь: https://stackoverflow.com/questions/412 ... tionresult
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»