2014-01-24 2 views
1

Я конвертирую вызовы WCF, которые я делаю в приложении, для асинхронного запуска, чтобы гарантировать, что графический интерфейс реагирует, когда он получает данные. В основном я использую эти методы для заполнения свойств 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, вы определяете Result на работу на основе задач с Task.FromResult(...)

Итак, мой тестовый код будет создан результат следующим образом:

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

Простой и отлично работает!

Смежные вопросы