Saltar al contenido

¿Mock HttpContext para la prueba unitaria de un controlador MVC de .NET core?

Solución:

Pude inicializar el httpcontext y el encabezado de esta manera:

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();
    controller.ControllerContext = new ControllerContext();
    controller.ControllerContext.HttpContext = new DefaultHttpContext();
    controller.ControllerContext.HttpContext.Request.Headers["device-id"] = "20317";
    var result = controller.Get();
    //the controller correctly receives the http header key value pair device-id:20317
    ...
}

En lugar de burlarse del HTTPContext, probablemente sea una mejor idea asignar el encabezado a un parámetro del método. Por ejemplo, en el controlador al final de esta respuesta, el id El parámetro se establece en el encabezado del valor con un nombre igual a “id-dispositivo” … La prueba unitaria se convierte en

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();
    var result = controller.GetHeaderValue("27");
    Assert.AreEqual(result, "27");
}

Mientras tu pueden burlarse del HttpContext, en mi opinión es algo que debe evitarse a menos que no tenga otra opción. La documentación para FromHeaderAttribute se puede encontrar aquí FromHeaderAttribute Class.

public class ValuesController: Controller
{
    public string GetHeaderValue([FromHeader(Name = "device-id")] string id)
    {
        return id;
    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *