Какие методы я могу использовать для насмешливых взаимодействий с TaskFactory.FromAsync ()? - PullRequest
0 голосов
/ 17 ноября 2011

Я пытаюсь выполнить модульное тестирование взаимодействий моего приложения и асинхронных HttpWebRequest методов, и мне интересно, как имитировать вызов асинхронного обратного вызова.Например, рассмотрим следующий код:

Task.Factory
    .FromAsync<Stream>(wr.BeginGetRequestStream, wr.EndGetRequestStream, null)
    .ContinueWith(SomeDelegate);

В этом случае wr - это объект, который по сути обертывает HttpWebRequest.Я могу заглушить и установить ожидания для этого объекта в модульном тесте, но я не могу придумать, как создать сигнал, который в противном случае вызвал бы EndRequestStream.Без этого сигнала модульное тестирование блокируется бесконечно в ожидании завершения задачи, что никогда не произойдет.

Я могу создать интерфейсы и прокси для Task и TaskFactory, затем установить ожидания на этом уровне, ноЯ надеюсь, что есть что-то меньшее.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Можно ли изменить тип wr, чтобы предоставить метод GetRequestAsync, который возвращает Task<Stream>? Таким образом, вы можете смоделировать это так, чтобы оно возвращало задачу из TaskCompletionSource, которую вы можете использовать в своем тесте. Я сделал нечто подобное с классом сам, чтобы проверить блок композиции, и это сработало хорошо. Тесты интересно написать с точки зрения всех возможных вещей, но это работает ...

0 голосов
/ 17 ноября 2011

Я не уверен, что получил правильный квестон, если вы хотите смоделировать Event Raise, вы можете использовать следующий синтаксис:

// wr should be Mock
// EndRequestStream  - event
wr.Raise(x => x.EndRequestStream += null, 
              this, 
              new EventArgs(...));

Не забудьте поставить правильный EventArgs экземпляр.

...