Domanda

Sono sempre stato fingendo / beffardo / sradicamento HttpContext in qualche modo in ASP.NET (molto più facile in ASP.NET MVC / monorotaia).

Ma posso vedere che HttpContext stesso può essere costruita facilmente, letteralmente, con un paio di righe di codice.

var tw = new StringWriter();
var workerReq = new SimpleWorkerRequest("/webapp", @"c:\here\there\wwwroot", "page.aspx", tw);
var context = new HtpContext(workerReq);

Se ci avvolgiamo il codice in qualcosa come questo dovrebbe funzionare bene, e probabilmente si può anche rendere ASPX utilizzando che:

using(Simulate.HttpContext()) {
  HttpContext.Current.BlaBla;
}

Quindi le domande sono:

  1. Motivi per cui non dovrebbe essere fatto.
  2. Motivi per cui dovrebbe essere fatto.
  3. Perché non è ampiamente utilizzato (in realtà non ricordo nessun post su di esso).

Mi ricordo di una post dove Phill Haack costruito HttpContext utilizzando hack Reflection.
Ma sembra che non solo è necessario.

Saluti,
Dmitriy.

È stato utile?

Soluzione

E 'bene per fare test molto semplice, ma come ti unità di prova di un componente che utilizza HttpRequest.Files? Per quanto ne so non ci sono API pubbliche per consentire di specificare questo su SimpleWorkerRequest. Anche se si poteva trovare un luogo in cui è possibile impostare una proprietà HttpFileCollection, notare che il suo costruttore è interna, quindi non si può addirittura creare un'istanza di quel tipo.

HttpRequest.Files non è sola in questo senso, e in effetti ci sono probabilmente molte più cose che non possono di prova con l'attuazione HttpContext corrente di quanto si possono di prova . Questo è dove le astrazioni davvero tornare utile.

Altri suggerimenti

Ci sono un paio di scenari da considerare.

Scenario Uno: Sei unit testing. avete qualcosa di piccolo, come una classe che gestisce l'accesso alla cache, e le chiamate che HttpContent.Cache esplicitamente. In questo caso, prendere in giro il contesto in modo da poter vedere cosa si sta telefonando, e se stanno lavorando il wy che ci si aspetta.

Scenario due: Stai facendo un test di integrazione, in cui si sta cercando di provare qualcosa di grande come la generazione di una pagina complessa. In questo caso, dare la vera HttpContent oggetto il modo che hai trovato. Il tuo test di integrazione sarà meglio simulare il reale tempo di esecuzione.

che potrebbe funzionare, ma ...

  • In primo luogo vedo alcuni percorsi, che potrebbe essere diverso in ambienti.
  • In secondo luogo ne ha bisogno qualcosa come installato IIS?
  • Quanto tempo ci vuole per crearlo? Se ho 100 test che ne hanno bisogno e ci vuole 1 secondo, quindi questo significa che la mia prova di funzionamento minuto o più a lungo e si porta a sviluppatori che eseguono test di meno.
  • Come facilmente si può prendere in giro / Cache di installazione, ecc Richiesta per la creazione di scenario di test?

Mocking / stubbing è probabilmente più facile.

Modifica

Trovato qualche codice sorgente per HttpContext e SimpleWorkerRequest nel progetto Mono:

Quelli possono dare una migliore comprensione ciò che sta accadendo nella creazione.

Hai trovato un articolo che potrebbe essere utile pure: ASP .NET CreateApplicationHost / SimpleWorkerRequest API Hole

Che in realtà illustra bene che abbiamo bisogno di capire cosa sta succedendo in quelli oggetto prima di applicarle e ci vuole tempo. Mocking sembra più facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top