2010-08-02 3 views
11

Le cadre de test Silverlight Unit définit un processus pour traiter les appels asynchrones (dériver la classe de test de Microsoft.Silverlight.Testing.SilverlightTest, ajouter un attribut asynchrone, utiliser les méthodes EnqueueXXX.) Considérant la séparation que SpecFlow présente entre la classe d'essai et les étapes:Gestion d'Async avec Specflow pour Silverlight

  • ces outils peut être mis à contribution attendre la méthode Silverlight appelle dans le test qui se comportent de manière asynchrone (tels que les appels de service Web)?
  • Si elles ne le peuvent pas, quelles sont les instructions pour gérer ce comportement dans les fichiers de test SpecFlow? (Peut-être utiliser un AutoResetEvent qui obtient déclenché dans un gestionnaire d'événements et d'attendre là-dessus?)

Répondre

1

Je suppose que tous ceux qui ont regardé et upvoted cette question a été en attente pour quelqu'un d'avoir une réponse impressionnante, élégante, mais ne regarde pas que cela va arriver ici. Pour aider les autres qui ont besoin d'une réponse utile maintenant ...

Ce que je l'ai fait avec d'autres situations tests unitaires est utiliser un AutoResetEvent comme vous l'avez mentionné dans la question:

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

Évidemment, il y a quelques des choses à considérer avec cette approche, mais elle fait passer l'idée.

+0

Merci pour la mise à jour Jason. Évidemment, cela fait un moment que cela a été publié initialement. Je serai heureux de le marquer comme une réponse quand je peux avoir le temps d'appliquer ce code à un test SpecFlow. Aussi, je me demande si le nouveau CTP Async apportera quelque chose sur le problème. – avidgator

2

L'utilisation d'un événement AutoResetEvent ne fonctionnera pas car l'appel WaitOne bloquera le thread d'interface utilisateur. Silverlight utilise le thread d'interface utilisateur même lorsque vous effectuez des appels asynchrones vers un service de données (voir cet article - Thead is blocked using WebClient and ManualResetEvent), de sorte que WaitOne arrête réellement l'appel du service.

Questions connexes