J'ai une fonction dans un contrôleur que je teste unitaire qui attend des valeurs dans l'en-tête de la requête http. Je ne peux pas initialiser le HttpContext car il est en lecture seule.
La fonction de mon contrôleur attend une valeur d'en-tête de requête http pour "device-id"
[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-t-il un moyen simple de le faire sans utiliser une bibliothèque tierce?
c#
asp.net-mvc
unit-testing
asp.net-core
James Wierzba
la source
la source
Réponses:
J'ai pu initialiser le httpcontext et l'en-tête de cette manière:
la source
Plutôt que de se moquer du HTTPContext, il est probablement préférable de mapper l'en-tête dans un paramètre de la méthode. Par exemple, dans le contrôleur en bas de cette réponse, le
id
paramètre est défini sur l'en-tête de valeur avec un nom égal à "device-id" ... Le test unitaire devient alorsBien que vous puissiez vous moquer du HttpContext, à mon avis, c'est quelque chose qui devrait être évité à moins que vous n'ayez pas le choix. La documentation de la classe FromHeaderAttribute peut être trouvée ici FromHeaderAttribute Class .
la source