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
id
pará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