Tengo una función en un controlador que estoy probando unitariamente que espera valores en el encabezado de la solicitud http. No puedo inicializar HttpContext porque es de solo lectura.
La función de mi controlador espera un valor de encabezado de solicitud http para "id-dispositivo"
[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();
    //not valid controller.HttpContext is readonly
    //controller.HttpContext = new DefaultHttpContext(); 
    var result = controller.Get();
    Assert.AreEqual(result.Count(), 2);
}¿Existe una forma sencilla de hacer esto sin utilizar una biblioteca de terceros?
                    
                        c#
                                asp.net-mvc
                                unit-testing
                                asp.net-core
                                
                    
                    
                        James Wierzba
fuente
                
                fuente

Respuestas:
Pude inicializar el httpcontext y el encabezado de esta manera:
fuente
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
idparámetro se establece en el encabezado de valor con un nombre igual a "id-dispositivo" ... La prueba unitaria se convierteSi bien puede burlarse de 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 .
fuente