public void SendMessage_SenderNotExisted_ThrowException()
        {
            var message = "test message";
            var type    = "test1";

            var sendingMessage = string.Empty;

            var sender = new Mock <ISender>();

            sender.Setup(x => x.Type).Returns("test");
            sender.Setup(x => x.SendMessage(message)).Callback((string messageParam) => { sendingMessage = messageParam; });

            var processor = new SenderProcessor(new List <ISender> {
                sender.Object
            });

            try
            {
                processor.SendMessage(type, message);

                Assert.Fail();
            }
            catch (Exception ex)
            {
                sender.Verify(x => x.SendMessage(message), Times.Never);
                sender.Verify(x => x.Type, Times.Once);
                Assert.AreEqual(sendingMessage, string.Empty);
                Assert.AreEqual(ex.Message, $"Sender for type '{type}' not found.");
            }
        }
        public void SendMessage_SenderExist_ShouldUseCorrectSender()
        {
            var message = "test message";
            var type    = "test";

            var sendingMessage = string.Empty;

            var sender = new Mock <ISender>();

            sender.Setup(x => x.Type).Returns("test");
            sender.Setup(x => x.SendMessage(message)).Callback((string messageParam) => { sendingMessage = messageParam; });

            var processor = new SenderProcessor(new List <ISender> {
                sender.Object
            });

            processor.SendMessage(type, message);

            sender.Verify(x => x.SendMessage(message), Times.Once);
            sender.Verify(x => x.Type, Times.Once);
            Assert.AreEqual(sendingMessage, message);
        }