Как проверить, что мой обратный вызов вызывается из события? - PullRequest
0 голосов
/ 06 мая 2011

У меня есть следующая подпись метода:

IAsyncResult BeginWrite(byte[] buffer, int offset, int size, AsyncCallback callback, object state)

Обратный вызов подключается к событию Completed следующим образом:

public override IAsyncResult BeginWrite(byte[] buffer, int offset, int size, AsyncCallback callback, object state)
{
  SocketAsyncEventArgs args = new SocketAsyncEventArgs()
  WriteAsyncResult ar = new WriteAsyncResult();
  ar.Callback = callback;
  args.UserToken = ar;
  // ...
  if (callback != null)
      args.Completed += OnSendAsyncComplete;
  // ...

  socket.SendAsync(args);
  // ...
}

private void OnSendAsyncComplete(object sender, SocketAsyncEventArgs e)
{
  var ar = e.UserToken as WriteAsyncResult;
  ar.Callback(ar);
}

Как проверить, что мой обратный вызов вызывается всякий раз, когдаargs.Completed, когда он вызывается.
Я знаю, что должен сам поднять его, но как проверить, что мой обратный вызов был вызван?

1 Ответ

1 голос
/ 06 мая 2011

Предполагая, что вы можете найти способ вызвать завершенное событие самостоятельно (возможно, используя дополнительный уровень абстракции), вы можете сделать что-то вроде этого:

Простой способ получить асинхронный обратный вызов внебольшой класс со свойством с именем CallbackCalled.Когда вызывается обратный вызов, вы устанавливаете для этого свойства значение true.

В своем тесте вы вызываете BeginWrite, передавая метод обратного вызова из экземпляра класса, а затем вручную вызываете событие и утверждаете, что после этого свойство CallbackCalledверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...