public async Task DequeueCallsProcessorWithLargeMessage() { // Arrange var didDeque = false; var blob = new Mock<IBlob>(); _blobRepository.Setup(x => x.Get("hello")).Returns(blob.Object); var queue = new LargeMessageQueue<TestQueueItem>(_queueSerializerMock.Object, _referenceQueueMock.Object, _blobRepository.Object, _loggerMock.Object, null); var item = new TestQueueItem { Name = "Zaphod" }; var reference = new LargeMessageReference {BlobReference = "hello"}; //var referenceQueueItem = new Mock<IQueueItem>(); var referenceItem = new Mock<IQueueItem<LargeMessageReference>>(); referenceItem.SetupGet(x => x.Item).Returns(reference); _referenceQueueMock.Setup( x => x.DequeueAsync(It.IsAny<Func<IQueueItem<LargeMessageReference>, Task<bool>>>())) .Returns(Task.FromResult(0)) .Callback((Func<IQueueItem<LargeMessageReference>,Task<bool>> func) => { func(referenceItem.Object); }); // Act await queue.DequeueAsync(tqi => { didDeque = true; return Task.FromResult(true); }); // Assert Assert.IsTrue(didDeque); }