12
votes

Unité testant une application httpApplication

J'ai une classe dérivée de httpApplication qui ajoute des fonctionnalités supplémentaires. Je suis au point où j'ai besoin de tester ces fonctionnalités, ce qui signifie que je dois être capable de créer une nouvelle instance de l'application httpApplication, de simuler une demande et de récupérer l'objet de réponse.

Comment puis-je utiliser exactement une unité de test d'un objet httpApplication? J'utilise MOQ en ce moment, mais je ne sais pas comment configurer l'objet simulé requis.


0 commentaires

3 Réponses :


2
votes

IMHO Ajouter une fonctionnalité en prolongeant HTTPAppLication n'est pas la meilleure chose à faire. Il est si difficile de se moquer du httpContext à cause des classes privées / internes / scellées que même si vous réussissez que vos tests d'unité seront tellement encombrés du code moqueur que vous ne pourrez plus comprendre ce que vous testez réellement.

Pourriez-vous donner plus de détails sur les fonctionnalités que vous ajoutez? Peut-être qu'il y a une meilleure façon d'ajouter cette fonctionnalité à votre application.


0 commentaires

10
votes

Malheureusement, ce n'est pas particulièrement facile à faire, car le httpApplication ne se prête pas à se moquer de manière très facilement; Il n'y a pas d'interface pour se moquer et la plupart des méthodes ne sont pas marquées comme virtuelles.

J'ai récemment eu un problème similaire avec HTTPQUEST et HTTPWEBESPONSONNONSE. En fin de compte, la solution que je suis allé était de créer un wrapper "passe-temps" droite pour les méthodes que je voulais utiliser: p> xxx pré>

etc, etc p>

Cela me permet de me moquer de ma propre interface wrapper. Pas nécessairement la chose la plus élégante au monde, mais un moyen très utile de se moquer de certaines des parties moins "mobles" du cadre. P>

Avant de vous précipiter et de le faire, il convient de revoir Ce que vous avez et voyant s'il y a une meilleure approche de vos tests qui vous éviteraient de devoir envelopper des cours. P>

Dans le cas de httpwebrequest, httpApplication et al, il n'y a souvent pas d'IMHO.

Pour définir ce wrapper en simule (à l'aide de mon exemple httpwebrequest ci-dessus), vous faites ensuite des trucs comme celui-ci avec MOQ: P>

var mockWebRequest = new Mock<IHttpWebRequestWrapper>();
mockWebRequest.SetupSet<string>(c => c.Method = "POST").Verifiable();
mockWebRequest.SetupSet<string>(c => c.ContentType = "application/x-www-form-urlencoded").Verifiable();
mockWebRequest.SetupSet<int>(c => c.ContentLength = 0).Verifiable();


1 commentaires

Merci pour l'info! J'ai refactore les choses un peu, la plupart des fonctionnalités supplémentaires sont désormais dans une classe externe pouvant être créée avec seulement un httpContextBase httpcontextbase à la base de s'appuyer sur le HttpApplication.



2
votes

J'ai trouvé le blog suivant plus tôt qui explique une approche assez belle à l'aide de Microsoft Moles.

http://maraboustork.co.uk/index.php/2011/03/mocking-httpwebesponse-with-moles/

En bref le La solution suggère ce qui suit: xxx


0 commentaires