2011-05-04 79 views
0

爲silverlight創建單元測試時,測試框架似乎內置了一些功能以幫助進行異步調用,但僅限於測試方法內。如果在你正在呼叫的那個子方法中有一個異步調用,該怎麼辦?Silverlight單元測試,處理嵌套方法中的異步調用

作爲一個例子,我們使用Specflow來測試我們的ViewModels,我們要調用一個命令的Execute方法,然後該命令異步調用Web服務。在聲明結果之前,如何確保while命令完成?

作爲一個例子,這是命令

[Asynchronous] 
    [When(@"I press calculate")] 
    public void WhenIPressCalculate() 
    { 
     _helloWorldViewModel.CalculateCommand.Execute(null); 
    } 

我需要等待整個命令完成後再繼續。

+0

如果異步調用與WCF服務相關,則可以創建一個模擬服務,該服務在方法調用中沒有延遲。這是更好的方法,因爲單元測試不需要很多時間來完成。 – vorrtex 2011-05-04 16:33:02

+0

我們實際上正在測試功能塊(行爲驅動開發),所以我們稱之爲真正的服務是很好的。這樣我們可以確保該功能完整。 – Nitro52 2011-05-04 23:53:33

回答

0

用與執行完成的退出條件相同的方法創建循環。

0

當調用網絡服務時,循環不起作用,因爲回調被封送到UI線程,如果它正在循環處理一個條件,則會在回調等待線程完成時創建死鎖。

無論如何,我們把這個問題解決了。事實證明specflow的人正在同時工作,並有一個解決方案正在進行中。我們在預發佈版本中使用了它。

我寫了一篇博客條目約在這裏http://rburnham.wordpress.com/2011/05/13/testing-silverlight-asynchronous-code-with-specflow/

這可能會改變,因爲這是用預發佈版本做了,希望我去的時間,如果它來更新它。