In queste ultime due ore stavo prototipizzando un micro framework per implementare servizi REST based mediante delle Http handlers. Niente di eccezzionale, ma l'idea di avere qualche cosa di simile a WCF, cioe' dei metodi con una firma prolissa e molto OO, mi piace.

Dopo aver trascorso un'oretta di codifica (refactoring a gogo), ho iniziato a scrivere qualche test. Per testare un Http handler ci vuole un Http context! E come lo creo? Non voglio tirar su tutta la 'baracca' ASP.NET e voglio avere un oggettino dove posso verificare il contenuto della risposta.

Per creare un HttpContext ci vuole un HttpWorkerRequest. Quest'ultima e' una classe astratta dalla quale deriva SimpleWorkerRequest. Creo la mia FakeWorkerRequest con gli ingredienti minimali per il mio scopo, che ricordo essere:

  • Avere un HttpContext valido
  • Poter verificare l'output (string based) della risposta

Con l'amico Reflector identifico in 5 minuti gli ingredienti minimali e implemento la mia classettina

public class FakeWorkerRequest : SimpleWorkerRequest  {
  public FakeWorkerRequest(string relativeUri, StringBuilder output)
    : base("", "", relativeUri, "", new StringWriter(output)) {  }
}

A questo punto sono pronto ad instanziare l'HttpContext che usero' per testare il mio Http Handler (REST + POX):

StringBuilder output = new StringBuilder();
HttpContext.Current = new HttpContext(new FakeWorkerRequest("shows/23", output));

HttpContext.Current.Response.Write("This is a simple test");
HttpContext.Current.Response.Flush();

Console.WriteLine(output);