2014-01-24 113 views
1

我正在將WCF調用轉換爲異步運行的應用程序,以確保GUI在獲取數據時具有響應性。大多數情況下,我使用這些方法來填充ViewModel的屬性。測試基於任務的WCF調用

舉例來說,這裏是我的新老代碼:

private async Task LoadDataItems() 
{ 
    //DataItems = Service.SelectDataItems(); 

    DataItems = await Service.SelectDataItemsAsync(); 
} 

而且,這裏的一些測試代碼中使用RhinoMocks:

//Doesn't set DataItems when LoadDataItems() is called 
myWcfServiceClient.Stub(async client => await client.SelectDataItemsAsync()).Return(new Task<List<DataItemDto>>(() => new List<DataItemDto> { testDataItem })); 

//NullReferenceException on SelectDataItemsAsync() 
myWcfServiceClient.Stub(client => client.SelectDataItemsAsync().Result).Return(new List<DataItemDto> { testDataItem }); 

基本上,在我的單元測試,無論是DataItems未設置或者我得到一個NullReferenceException試圖僞裝結果。這可能是因爲太多的RhinoMocks比任何一個問題...

回答

1

在RhinoMocks,你定義的基於任務的操作ResultTask.FromResult(...)

所以,我的測試代碼將設立,結果如下:

myWcfServiceClient.Stub(client => client.SelectDataItemsAsync()).Return(Task.FromResult(new List<DataItemDto> { testDataItem })); 

簡單和偉大的作品!