Pregunta

Siempre he estado fingiendo/burla/intermitencia HttpContext de alguna manera en ASP.NET (mucho más fácil en ASP.NET MVC/Monorriel).

Pero puedo ver que HttpContext sí pueden ser construidos fácilmente, literalmente, con un par de líneas de código.

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

Si vamos a terminar este código en algo como esto debería funcionar bien, y probablemente incluso podemos representar ASPX uso que:

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

Así, las preguntas son:

  1. Razones por las que NO se debe hacer.
  2. Razones por las que se DEBE hacer.
  3. Por qué no es ampliamente utilizado (de hecho no recuerdo NINGUNA puestos sobre ella).

Recuerdo un post donde Phill Haack construido HttpContext el uso de la Reflexión hacks.
Pero parece que no es necesario.

Saludos,
Dmitriy.

¿Fue útil?

Solución

Está bien para hacer la prueba muy simple, pero ¿cómo te unidad de probar un componente que utiliza HttpRequest.Files? Por lo que yo sé no hay API públicas que le permiten especificar esto en SimpleWorkerRequest. Incluso si se pudiera encontrar un lugar donde se puede establecer una propiedad HttpFileCollection, tenga en cuenta que su constructor es interna, por lo que ni siquiera se puede crear una instancia de ese tipo.

HttpRequest.Files no está solo en este sentido, y de hecho es probable que haya mucho más cosas que no puede de prueba con la aplicación HttpContext corriente de lo que puede prueba . Aquí es donde realmente abstracciones son útiles.

Otros consejos

Hay un par de escenarios a tener en cuenta.

Escenario uno: Eres la unidad de pruebas. usted tiene algo pequeño, como una clase que gestiona el acceso a la caché, y los tipos de llamadas HttpContent.Cache explícitamente. En este caso, burlarse del contexto para que pueda ver lo que están haciendo las llamadas, y si están trabajando la wy esperas.

Escenario dos: Usted está haciendo una prueba de integración, en el que está tratando de probar algo tan grande como la generación de una página compleja. En este caso, le dan el verdadero HttpContent objetar la manera que ha encontrado. Su prueba de integración será simular mejor el tiempo de ejecución real.

Eso podría funcionar, pero ...

  • En primer lugar veo algunas rutas, que podría ser diferente en ambientes.
  • En segundo lugar ¿necesita algo así como IIS instalado?
  • ¿Cuánto tiempo se necesita para crearlo? Si tengo 100 pruebas que lo necesitan y se tarda 1 segundo, entonces eso significa que mi prueba de funcionamiento acerca minutos o más largo y se lleva a los desarrolladores la ejecución de pruebas menos.
  • ¿Con qué facilidad se puede burlarse / caché de configuración, etc. Solicitud para la creación de escenario de prueba?

El imitar / stubbing es probablemente más fácil.

Editar

Encontrados algo de código fuente para HttpContext y SimpleWorkerRequest en proyecto Mono:

Estos pueden dar una mejor idea de lo que está sucediendo en la creación.

Ha encontrado un artículo de lo que podría ser útil también: ASP .NET CreateApplicationHost / SimpleWorkerRequest API agujero

Que en realidad ilustra muy bien que tenemos que entender lo que está sucediendo en los objetos antes de aplicarlos y se necesita tiempo. El imitar parece más fácil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top