如何测试我的回调是从事件中调用的?

时间:2011-05-06 12:40:21

标签: silverlight unit-testing tdd nunit moq

我有以下方法签名:

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 个答案:

答案 0 :(得分:1)

假设你可以找到一种方法来自己提升已完成的事件(也许使用额外的抽象层),你可以这样做:

一种简单的方法是在具有名为CallbackCalled的属性的小类中进行异步回调。调用回调时,将此属性设置为true。

在测试中,调用BeginWrite从类的实例传递回调方法,然后手动引发事件并断言,之后CallbackCalled属性为true。