2010-08-02 7 views
11

El marco de prueba Silverlight Unit define un proceso para tratar las llamadas Async (derivar la clase de prueba de Microsoft.Silverlight.Testing.SilverlightTest, agregar el atributo Asincrónico, usar los métodos EnqueueXXX). Teniendo en cuenta la separación que presenta SpecFlow entre la clase de prueba y los pasos:Manejo de Async con Specflow para Silverlight

  • se puede poner estas herramientas para soportar la espera en el método de Silverlight llamadas dentro de la prueba que se comportan de forma asíncrona (como hacer llamadas de servicio web)?
  • Si no pueden, ¿cuál es la orientación para el manejo de este comportamiento en los archivos de prueba SpecFlow? (Tal vez utilizar un AutoResetEvent que consigue tropezó en un controlador de eventos y esperar en él?)

Respuesta

1

supongo que todos los que han mirado y upvoted esta cuestión ha estado esperando a alguien para tener una respuesta impresionante, elegante, pero no parece que eso suceda aquí. Para ayudar a otros que necesitan una respuesta utilizable ahora ...

Lo que he hecho con otras situaciones de la unidad de pruebas es utilizar un AutoResetEvent como usted ha mencionado en la pregunta:

AutoResetEvent MyAutoReset = new AutoResetEvent(); 
[TestMethod] 
public void MyTestMethod() 
{ 
    var MyItem.GetItem(x => 
     { 
     // Return handler 
     MyAutoReset.Set(); 
     }); 
    MyAutoReset.WaitOne(5000, false)); 
} 

Obviamente hay algunas cosas a considerar con este enfoque, pero hace que la idea se transmita.

+0

Gracias por la actualización de Jason. Obviamente, ha pasado un tiempo desde que se publicó inicialmente. Voy a ser feliz para marcarlo como una respuesta cuando puedo conseguir un poco de tiempo para aplicar este código para una prueba originado-SpecFlow. Además, me pregunto si el nuevo Async CTP aportará algo al problema. – avidgator

2

El uso de un AutoResetEvent no funcionará porque la llamada WaitOne bloqueará el subproceso de la interfaz de usuario. Silverlight hace uso del hilo de interfaz de usuario, incluso al hacer asíncrono llamadas a un servicio de datos (véase este post - Thead is blocked using WebClient and ManualResetEvent) por lo que la realidad WaitOne detendrá el servicio de ser llamado.

Cuestiones relacionadas