Home Mocking Begin/End Async API
Post
Cancel

Mocking Begin/End Async API

Moq

Example

1
2
var request = new ReceiveMessageRequest();
var msg = await Task<ReceiveMessageResponse>.Factory.FromAsync(queue.BeginReceiveMessage, queue.EndReceiveMessage, request, null);

Test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var receiveMessageAsyncResult = new Mock<IAsyncResult>();
_queue.Setup(x => x.BeginReceiveMessage(It.IsAny<ReceiveMessageRequest>(), It.IsAny<AsyncCallback>(), It.IsAny<object>()))
      .Returns(receiveMessageAsyncResult.Object)
      .Callback((ReceiveMessageRequest rmr, AsyncCallback cb, object state) =>
      {
          receiveMessageAsyncResult.Setup(x => x.AsyncState).Returns(state);
          cb(receiveMessageAsyncResult.Object);
      });
_queue.Setup(x => x.EndReceiveMessage(It.IsAny<IAsyncResult>())).Returns(() =>
{
    if (messageCount > 0)
    {
        throw new MessageNotExistException("No more messages");
    }

    messageCount++;
    return new ReceiveMessageResponse
    {
        Message = new Message
        {
            Body = "SGVsbG8gV29ybGQ=", // Hello World
            ReceiptHandle = "12345"
        }
    };
});
This post is licensed under CC BY 4.0 by the author.