Solución:
Suponiendo algo como el
public IActionResult GetOrders() {
var orders = repository.All();
return Ok(orders);
}
el controlador en este caso está devolviendo un OkObjectResult
clase.
Transmita el resultado al tipo de lo que está devolviendo en el método y realice su aserción en ese
[Fact]
public void GetOrders_WithOrdersInRepo_ReturnsOk() {
// arrange
var controller = new OrdersController(new MockRepository());
// act
var result = controller.GetOrders();
var okResult = result as OkObjectResult;
// assert
Assert.IsNotNull(okResult);
Assert.AreEqual(200, okResult.StatusCode);
}
También puedes hacer cosas interesantes como:
var result = await controller.GetOrders();//
var okResult = result as ObjectResult;
// assert
Assert.NotNull(okResult);
Assert.True(okResult is OkObjectResult);
Assert.IsType<TheTypeYouAreExpecting>(okResult.Value);
Assert.Equal(StatusCodes.Status200OK, okResult.StatusCode);
Gracias
Otras respuestas aconsejadas para lanzar a ObjectResult
, pero solo funciona si regresas OkObjectResult
NotFoundObjectResult
etc. Pero el servidor podría regresar NotFound
OkResult
que derivó de StatusCodeResult
.
Por ejemplo:
public class SampleController : ControllerBase
{
public async Task<IActionResult> FooAsync(int? id)
{
if (id == 0)
{
// returned "NotFoundResult" base type "StatusCodeResult"
return NotFound();
}
if (id == 1)
{
// returned "StatusCodeResult" base type "StatusCodeResult"
return StatusCode(StatusCodes.Status415UnsupportedMediaType);
}
// returned "OkObjectResult" base type "ObjectResult"
return new OkObjectResult("some message");
}
}
Observé la implementación de todos estos métodos y descubrí que todos son heredados del IStatusCodeActionResult
interfaz. Parece que este es el tipo más básico que contiene StatusCode
:
private SampleController _sampleController = new SampleController();
[Theory]
[InlineData(0, StatusCodes.Status404NotFound)]
[InlineData(1, StatusCodes.Status415UnsupportedMediaType)]
[InlineData(2, StatusCodes.Status200OK)]
public async Task Foo_ResponseTest(int id, int expectedCode)
{
var actionResult = await _sampleController.FooAsync(id);
var statusCodeResult = (IStatusCodeActionResult)actionResult;
Assert.Equal(expectedCode, statusCodeResult.StatusCode);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)