Pergunta

Eu sempre estava fingindo / zombeteiro / stubbing HttpContext de alguma forma em ASP.NET (muito mais fácil no ASP.NET MVC / MonoRail).

Mas eu posso ver que HttpContext em si pode ser construída facilmente, literalmente, com algumas linhas de código.

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

Se vamos quebrar esse código em algo como isso deve funcionar bem, e, provavelmente, podemos até mesmo tornar ASPX usando o seguinte:

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

Assim, as perguntas são:

  1. Razões pelas quais não deve ser feito.
  2. As razões por que deve ser feito.
  3. Por que não é amplamente utilizado (na verdade eu não me lembro de nenhum posts sobre o assunto).

Lembro-me de um post onde Phill Haack construído HttpContext usando hacks reflexão.
Mas parece que ele simplesmente não é necessário.

Cheers,
Dmitriy.

Foi útil?

Solução

É bom para fazer testes muito simples, mas como é que você teste de unidade de um componente que utiliza HttpRequest.Files? Tanto quanto eu sei que não existem APIs públicas para permitir que você especifique isso no SimpleWorkerRequest. Mesmo se você pudesse encontrar um local onde você pode definir uma propriedade HttpFileCollection, nota que seu construtor é interno, para que você não pode mesmo criar uma instância desse tipo.

HttpRequest.Files não é o único a este respeito, e na verdade, provavelmente há muito mais coisas que você não pode teste com a implementação atual HttpContext do que você pode test . Este é o lugar onde abstrações realmente vir a calhar.

Outras dicas

Há um par de cenários a considerar.

Um cenário: Você é o teste de unidade. você tem algo pequeno, como uma classe que gerencia o acesso ao cache, e que apela HttpContent.Cache explicitamente. Neste caso, zombar do contexto para que você possa ver o que as chamadas estão sendo feitas, e se eles estão trabalhando a wy você espera.

Cenário dois: Você está fazendo um teste de integração, onde você está tentando testar algo grande como a geração de uma página complexa. Neste caso, dar-lhe o verdadeiro HttpContent objeto a maneira que você encontrou. Seu teste de integração irá simular melhor o tempo de execução real.

Esse trabalho força, mas ...

  • Em primeiro lugar eu vejo alguns caminhos, que podem ser diferentes em ambientes.
  • Em segundo lugar faz isso precisa de algo como IIS instalado?
  • Quanto tempo é preciso para criá-la? Se eu tenho 100 testes que precisam dele e leva 1 segundo, então isso significa que o meu teste de funcionamento aproximadamente minuto ou mais tempo e leva a desenvolvedores executam testes menos.
  • Como facilmente se pode zombar / setup Cache, Request etc para a criação de cenário de teste?

Mocking / stubbing é provavelmente mais fácil.

Editar

Encontrado algum código fonte para HttpContext e SimpleWorkerRequest no projeto Mono:

Aqueles pode dar uma visão melhor o que está acontecendo na criação.

Encontrou um artigo que poderia ser útil também: ASP .NET CreateApplicationHost / SimpleWorkerRequest API Buraco

Isso realmente ilustra muito bem que nós precisamos entender o que está acontecendo naqueles objeto antes de aplicá-las e isso leva tempo. Mocking parece mais fácil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top