Comment puis-je faire un test de l'unité à tester une méthode qui vérifie les en-têtes de requête?
Je suis très, très nouveau pour les tests unitaires et suis en train d'écrire un test pour une jolie méthode simple:
public class myClass : RequireHttpsAttribute
{
public override void OnAuthorization(AuthoizationContext filterContext)
{
var request = filterContext.HttpContext.Request;
var header = Convert.ToBoolean(request.Headers["Special-Header-Name"]);
if (!(header || request.IsSecureConnection))
{
HandleNonHttpsRequest(filterContext);
}
}
}
Cette méthode, qui hérite de la RequireHttpsAttribute
, vérifie si un en-tête est présent à partir d'une page, si elle est manquante ou fausse, et la page n'est pas sécurisée, puis il va appeler HandleNonHttpsRequest
, sinon il ne fait rien.
Nous utilisons Moq et Nunit pour les tests. J'ai trouvé quelques ressources pour aider à construire un fakeHttpContext Moq, mais honnêtement, je ne sais pas comment faire, ni où aller dans mes tests unitaires pour s'assurer que les faux HttpContexts sont ou ne sont pas la cause de la HandleNonHttpsRequest
méthode à appeler.
J'ai vraiment apprécier toutes les lignes directrices de cette question.
OriginalL'auteur Dredj | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
Merci!!!! Ceci m'a envoyé dans la bonne direction pour obtenir quelques essais réussis.
Salut, j'ai également suivi le même code de moquerie dans mon unité de test, mais je suis arriver NullReferenceException pour filterContext.DisplayMode
OriginalL'auteur Darin Dimitrov
Oui, j'aimerais utiliser Moq et de créer un
Mock<AuthorizationContext>
. Vous aurez besoin d'une série d'objets fantaisie pour l'installation de la faux de la demande, notamment pour spécifier un NameValueCollection de faux en-têtes.(désolé si la syntaxe ou de l'utilisation est un peu hors; de la sorte par le haut de ma tête)
Vous pourriez avoir besoin d'aller dans et se moquent de tout autre membre supplémentaire sur filterContext que HandleNonHttpsRequest invoque. J'ai deux recommandations pour aller à ce sujet, comme il peut parfois être un problème si la méthode de test est de faire beaucoup de trucs compliqués sur filterContext: 1) vérifier visuellement et, si c'est assez clair, se moquer de toutes les pièces invoquées 2) créer la myClass.OnAuthorizationRequest, mais ne pas mettre en œuvre le code d'autres encore que l'appel à l'HandleNonHttpsRequest. Continuez à lancer le test et la fixation manquant/mal moqué de membres jusqu'à ce que le test passe. Puis appliquer votre logique réelle de OnAuthorizationRequest, le test et la correction (rincer répéter jusqu'à ce qu'il passe.
OriginalL'auteur HackedByChinese
J'ai rencontré un problème avec la solution retenue à l'aide de ASP.NET MVC 4. Pour le résoudre j'ai raillé le contexte http Éléments attribut sinon le
sut.OnAuthorization
était à l'origine un objet n'est pas définie exception:OriginalL'auteur setebos