2009-04-06 5 views
25

... absolument rien?System.Web.Abstractions: à quoi sert-il?

Quelle partie du puzzle-t-il remplir pour ASP.NET WebForms et ASP.NET MVC respectivement?

Pouvez-vous créer une application de base ASP.NET * qui utilise System.Web.Abstractions pour qu'elle puisse être utilisée dans les deux types d'applications Web ASP.NET?

Dans ce cas, comment ont-ils réintégré les classes dans System.Web.Abstractions dans ASP.NET WebForms?

Vous ne pouvez pas créer de nouveaux objets à partir de l'espace de nom, il ne peut donc pas être utilisé pour des moqueries, n'est-ce pas?

Mise à jour: Désolé de ne pas être clair sur ce que je connais le problème avec les tests de HttpContext et d'autres objets ASP.NET de build-it. Mais merci pour de bonnes explications quand même.

+6

Complètement sorti du champ gauche, mais grâce au titre de votre question, j'ai maintenant War par Edwin Starr dans ma tête. :( –

Répondre

35

L'espace de noms contient des types qui sont conçus pour envelopper ASP. Classes de base NET (telles que HttpSessionState).

Quoi, vous voulez savoir pourquoi?

La plupart de ces classes ASP.NET de base sont scellées ou statiques, ce qui rend impossible la séparation des dépendances entre elles et votre code. Cela signifie que vous ne pouvez pas vous moquer de ces dépendances, ce qui rend beaucoup plus difficile de tester votre code ASP.NET. Ainsi, au lieu de manipuler directement le HttpResponse directement dans le code, vous le manipulez via le HttpResponseWrapper, ce qui, pendant le test, vous permet de stub ou de mock out pour contrôler le comportement de l'objet HttpResponse. Si vous avez déjà pensé à créer ces wrappers, ou si vous en avez implémenté un ou deux auparavant, vous savez qu'il y a beaucoup de travail dans cet espace de noms, et moi, je suis content qu'ils l'aient fait il.

17

Il est en effet pour moqueur. - HttpContext est une classe scellée et ne peut pas être (facilement) moquée. HttpContextBase n'est pas scellé et je crois que ses méthodes sont virtuelles, ce qui facilite grandement les moqueries.

Alors que vous ne pouvez pas nouveau une instance de HttpContextBase (par exemple, pour une utilisation dans WebForms), vous pouvez obtenir une instance via:

var ctx = new HttpContextWrapper(HttpContext.Current); 
Questions connexes