public async Task Publish_TopicMapNotDefined_ThrowsInvalidOperation(
            string message,
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            SerializedMessagePublisher sut)
        {
            messageTypeTopicMap.Get(message.GetType()).ReturnsNull();
            var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Publish(message, None));

            Assert.Equal($"Message type {message.GetType()} is not registered with: {messageTypeTopicMap.GetType()}.",
                         ex.Message);
        }
        public async Task Publish_SerializerReturnsNull_ThrowsInvalidOperation(
            string topic,
            string message,
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            [Frozen] ISerializer serializer,
            SerializedMessagePublisher sut)
        {
            var messageType = GetType();

            messageTypeTopicMap.Get(topic).Returns(messageType);
            serializer.Serialize(message).ReturnsNull();

            var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => sut.Publish(message, None));

            Assert.Equal(
                $"Serializer {serializer.GetType()} returned null for message of type {message.GetType()}.",
                ex.Message);
        }
        public async Task Publish_SerializedMessage_CallsRawPublisher(
            string topic,
            bool message,
            byte[] serializedMessage,
            [Frozen] IRawMessagePublisher rawMessagePublisher,
            [Frozen] IMessageTypeTopicMap messageTypeTopicMap,
            [Frozen] ISerializer serializer,
            SerializedMessagePublisher sut)
        {
            // Arrange
            var messageType = message.GetType();

            messageTypeTopicMap.Get(messageType).Returns(topic);
            serializer.Serialize(message).Returns(serializedMessage);

            // Act
            await sut.Publish(message, None);

            // Assert
            await rawMessagePublisher.Received().Publish(topic, serializedMessage, None);
        }
        public async Task Publish_NullMessage_ThrowsArgumentNull(SerializedMessagePublisher sut)
        {
            var ex = await Assert.ThrowsAsync <ArgumentNullException>(() => sut.Publish(null as object, None));

            Assert.Equal("message", ex.ParamName);
        }