public async Task GivenMessage_WhenPublishMultipleMessagesAndHasFailure_ShouldThrow() { var basicPropertiesMock = new Mock <IBasicProperties>(); var batchMock = new Mock <IBasicPublishBatch>(); var routingMock = new Mock <IRouting>(); var messageMock = new Mock <IPublisherMessage>(); var publisherMock = new Mock <IPublisher>(); var bytes = Array.Empty <byte>(); const string exchange = "exchange"; const string routingKey = "exchange"; const string correlationId = "correlationId"; var headersMock = new Mock <IDictionary <string, object> >(); _channelMock.Setup(x => x.CreateBasicPublishBatch()) .Returns(batchMock.Object) .Verifiable(); _channelMock.Setup(x => x.CreateBasicProperties()) .Returns(basicPropertiesMock.Object) .Verifiable(); _channelMock.Setup(x => x.ConfirmSelect()) .Verifiable(); _channelMock.Setup(x => x.WaitForConfirms(It.IsAny <TimeSpan>())) .Returns(true) .Verifiable(); routingMock.SetupGet(x => x.ExchangeName).Returns(exchange).Verifiable(); routingMock.SetupGet(x => x.RoutingKey).Returns(routingKey).Verifiable(); messageMock.SetupGet(x => x.Routing) .Returns(routingMock.Object) .Verifiable(); messageMock.Setup(x => x.CancellationToken) .Returns(CancellationToken.None) .Verifiable(); messageMock.SetupSequence(x => x.Serialize()) .Returns(bytes) .Throws <Exception>() .Returns(bytes); messageMock.Setup(x => x.GetHeaders()) .Returns(headersMock.Object) .Verifiable(); messageMock.SetupGet(x => x.CorrelationId) .Returns(correlationId) .Verifiable(); batchMock.Setup(x => #pragma warning disable 618 // New Add method is an extension and can not be overriden x.Add( #pragma warning restore 618 exchange, routingKey, false, basicPropertiesMock.Object, bytes)) .Verifiable(); batchMock.Setup(x => x.Publish()) .Verifiable(); var batching = new PublisherMessageBatching( publisherMock.Object, messageMock.Object, messageMock.Object, messageMock.Object); await _publisher.Awaiting(x => x.PublishAsync( batching, CancellationToken.None)) .Should() .ThrowAsync <PublishingException>(); _channelMock.VerifyAll(); messageMock.VerifyAll(); batchMock.VerifyAll(); }