我有以下方法签名:
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事件被引发,我如何测试我的回调被调用 我知道我必须自己提高它但是如何测试我的回调被调用?
答案 0 :(得分:1)
假设你可以找到一种方法来自己提升已完成的事件(也许使用额外的抽象层),你可以这样做:
一种简单的方法是在具有名为CallbackCalled的属性的小类中进行异步回调。调用回调时,将此属性设置为true。
在测试中,调用BeginWrite从类的实例传递回调方法,然后手动引发事件并断言,之后CallbackCalled属性为true。