Pruebas de MediatR y CQRS. ¿Cómo verificar que se llama al controlador?
Actualmente estoy tratando de implementar MediatR
en mi proyecto, cubriéndolo con pruebas. Quiero asegurarme de que se haya llamado al Handle
del controlador al enviar una solicitud.
Tengo esta consulta:
public class GetUnitsQuery : IRequest<List<UnitResponse>>
{
}
Controlador:
public class GetUnitsHandler : IRequestHandler<GetUnitsQuery, List<UnitResponse>>
{
readonly IUnitRepository UnitRepository;
readonly IMapper Mapper;
public GetUnitsHandler(IUnitRepository unitRepository, IMapper mapper)
{
this.UnitRepository = unitRepository;
Mapper = mapper;
}
public async Task<List<UnitResponse>> Handle(GetUnitsQuery request, CancellationToken cancellationToken)
{
return Mapper.Map<List<UnitResponse>>(UnitRepository.GetUnits());
}
}
Enviar solicitud desde el controlador:
var result = await Mediator.Send(query);
¿Algún idea de cómo probar si se llama a un Handle
cuando se especifica una consulta específica utilizando MoQ
?
davy.ai
Para probar si el método
GetUnitsHandler.Handle
es llamado al enviar una solicitudGetUnitsQuery
usando Moq, puedes crear un objeto Mock de la interfazIRequestHandler<getunitsquery,></getunitsquery,><unitresponse>>
y luego llamar al métodoSetup
para configurar lo que sucede cuando se llama al métodoHandle
.Aquí hay un ejemplo de método de prueba:
En este ejemplo, creamos un objeto Mock de la interfaz
IRequestHandler<getunitsquery,></getunitsquery,><unitresponse>>
y luego configuramos el objetoMediator
para que devuelva una lista vacía cuando se llame al métodoSend
con un objetoGetUnitsQuery
.Luego, llamamos al método
Mediator.Send
con un objetoGetUnitsQuery
.Finalmente, verificamos que se llamó una vez al método
Handle
del objetomockHandler
con cualquier objetoGetUnitsQuery
y cualquierCancellationToken
.