2010-08-02 58 views
11

Silverlight單元測試框架定義了一個處理異步調用的過程(從Microsoft.Silverlight.Testing.SilverlightTest派生測試類,添加異步屬性,使用EnqueueXXX方法)。考慮SpecFlow的分離在測試類和步驟之間:使用Specflow處理異步Silverlight

  • 這些工具可以用來承受在測試中的Silverlight方法調用是否異步執行(例如進行Web服務調用)?
  • 如果他們不能,那麼在SpecFlow測試文件中處理這種行爲的指導是什麼? (也許使用獲取的事件處理程序絆着的的AutoResetEvent和等待嗎?)

回答

1

我想大家誰也看和upvoted這個問題一直在等待有人來有一個真棒,優雅的答案,但它這看起來不會發生在這裏。爲了幫助其他人誰需要,現在可用的答案...

我已經與其他單元測試的情況下做的是使用的AutoResetEvent就像你在問題中所提到的:

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

顯然有幾個需要用這種方法來考慮的事情,但是它可以實現這個想法。

+0

感謝您的更新傑森。顯然,這是最初發布以來的一段時間。當我可以花一些時間將這段代碼應用於一個基於SpecFlow的測試時,我很樂意將其標記爲答案。此外,我想知道新的Async CTP是否會帶來任何問題。 – avidgator 2011-04-18 03:11:50

2

使用AutoResetEvent將不起作用,因爲WaitOne調用會阻塞UI線程。即使在對數據服務進行異步調用時,Silverlight也會使用UI線程(請參閱此文章 - Thead is blocked using WebClient and ManualResetEvent),以便WaitOne實際上可以停止調用該服務。