Jestem w trakcie budowania interfejsu ASP.NET Core WebAPI i próbuję zapisać testy jednostkowe dla kontrolerów. Większość przykładów, które znalazłem, pochodzi ze starszych platform WebAPI/WebAPI2 i nie wydaje się, aby korelowały one z nowymi kontrolerami Core.Testowanie jednostki Metody kontrolera WebAPI, które zwracają IActionResult
Moje metody sterowania zwracają IActionResults
. Jednak obiekt IActionResult
ma tylko metodę ExecuteResultAsync()
, która wymaga kontekstu kontrolera. Instancji kontrolera jestem ręcznie, więc kontekst kontrolera w tym wystąpieniu jest null, co powoduje wyjątek podczas wywoływania ExecuteResultAsync
. Zasadniczo prowadzi to mnie do bardzo zjadliwej ścieżki, aby pomyślnie ukończyć te testy jednostkowe i jest bardzo niechlujna. Zastanawiam się, że musi istnieć prostszy/poprawniejszy sposób testowania kontrolerów API.
Ponadto, moje kontrolery NIE używają async/czekam, jeśli to robi różnicę.
Prostym przykładem co usiłuję osiągnąć:
metodęKontroler:
[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);
}
}
jednostka testowa:
[Fact]
public void GetOrders_WithOrdersInRepo_ReturnsOk()
{
// arrange
var controller = new OrdersController(new MockRepository());
// act
IActionResult result = controller.GetOrders();
// assert
Assert.Equal(HttpStatusCode.OK, ????);
}
Pokaż 'metody GetOrders'. co powracasz w tej metodzie. rzuć wynik do rodzaju tego, co powracasz w metodzie i wykonaj swój dowód na ten temat. – Nkosi