2009-04-06 2 views
25

... assolutamente niente?System.Web.Abstractions: a cosa serve?

Quale parte del puzzle vuol riempire per ASP.NET WebForms e ASP.NET MVC rispettivamente?

È possibile creare in qualche modo un'applicazione di base ASP.NET * che utilizza System.Web.Abstractions in modo che possa essere utilizzata in entrambi i tipi di applicazioni Web ASP.NET?

In tal caso, in che modo hanno adattato nuovamente le classi in System.Web.Abstractions ai WebForm ASP.NET?

Non è possibile creare nuovi oggetti dallo spazio dei nomi, quindi non può essere utilizzato per il mocking, vero?

Aggiornamento: Ci scusiamo per non essere chiari sul fatto che conosco il problema con il test di HttpContext e altri oggetti ASP.NET build-it. Ma grazie per le buone spiegazioni comunque.

+6

Completamente fuori campo, ma grazie al titolo della domanda, ora ho War di Edwin Starr nella mia testa. :( –

risposta

35

Lo spazio dei nomi contiene tipi che sono progettati per avvolgere ASP. Classi di base di NET (come HttpSessionState).

Cosa, vuoi sapere perché?

Molte di queste classi ASP.NET di base sono sigillate o statiche, rendendo impossibile rompere le dipendenze tra esse e il codice. Ciò significa che non è possibile prendere in giro queste dipendenze principali, rendendo molto più difficile testare il codice ASP.NET. Quindi, invece di manipolare direttamente HttpResponse direttamente nel codice, puoi manipolarlo tramite lo , che, durante il tempo del test, puoi eseguire lo stub o il mock out per controllare come si comporta l'oggetto HttpResponse.

Se hai mai pensato di creare questi wrapper, o ne hai implementato uno o due prima, sapresti che c'è molto lavoro racchiuso in quel namespace, e io, per esempio, sono contento di averlo fatto esso.

17

È davvero per beffarsi. - HttpContext è una classe sigillata e non può essere (facilmente) derisa. HttpContextBase non è sigillato e credo che i metodi siano virtuali, rendendo il mocking molto più facile.

Mentre è possibile non è nuova-up un'istanza di HttpContextBase (diciamo, per l'uso in WebForms), è possibile ottenere un'istanza tramite:

var ctx = new HttpContextWrapper(HttpContext.Current);