2010-08-02 16 views
11

Silverlight Unit test Framework, Async çağrılarıyla ilgili bir süreç tanımlar (Microsoft.Silverlight.Testing.SilverlightTest'ten test sınıfı türetir, Eşzamansız öznitelik ekle, EnqueueXXX yöntemlerini kullanın.) SpecFlow'un sunduğu ayrıştırmayı göz önüne alarak Test sınıfı ve adımlar arasında:Silverlight için Specflow ile Async Kullanımı

  • bu araçlar Silverlight yöntemi (web hizmeti çağrıları yapma gibi) uyumsuz davranmaya testi içinde aramaları beklemek ayı bağdaşabilir mi?
  • Yapamazlarsa, SpecFlow test dosyalarında bu davranışı işlemek için kılavuz nedir? (Belki bir olay işleyicisi takıldı alır bir AutoResetEvent kullanmak ve üzerinde bekleyin?)

cevap

1

ben baktım ve bu soru müthiş zarif cevap bekleyen birinin olmuştur upvoted geçen herkese sanırım, ama onu Burada olacak gibi gözükmüyor.

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

Açıkçası birkaç vardır: Söz konusu belirtmiştik gibi şimdi kullanılabilir bir cevap gerek diğerlerini ... yardımcı olmak için diğer birim test durumlarla ne yaptın

bir AutoResetEvent kullanmaktır Bu yaklaşımla göz önünde bulundurulması gereken şeyler, ancak bu fikir karşısındadır.

+0

Güncelleme Jason için teşekkürler. Açıkçası, bu başlangıçta yayınlanmasından beri bir süre oldu. Bu kodu SpecFlow kaynaklı bir sınamaya uygulamak için biraz zaman bulabildiğimde bir yanıt olarak işaretlemekten memnuniyet duyarız. Ayrıca, yeni Async CTP'nin problemin üstesinden gelebilecek bir şey getirip getirmeyeceğini merak ediyorum. – avidgator

2

Bir AutoResetEvent kullanılması, WaitOne çağrısının UI iş parçacığını engelleyeceği için çalışmaz. Silverlight, UI iş parçacığı, bir veri servisine zaman uyumsuz çağrıları yaparken bile (bu iletiye bakın - Thead is blocked using WebClient and ManualResetEvent), böylece WaitOne hizmetin çağrılmasını durdurur.