Ejemplo n.º 1
0
        public void SendMailTest()
        {
            //Arrange
            var email = new Mock<EmailBase>();
            var mailMessage = new Mock<IEmailBuilder>();
            var mailClient = new Mock<IMailClient>();
            var mailFactory = new Mock<IEmailFactory>();
            var mailIntialezer = new Mock<IEmailInitializer>();

            mailFactory.Setup(m => m.CreateEmailBuilder()).Returns(mailMessage.Object);
            mailFactory.Setup(m => m.CreateMailClient()).Returns(mailClient.Object);

            var tcs = new TaskCompletionSource<object>();

            mailClient.Setup(m => m.Send(mailMessage.Object)).Returns(() =>
                {
                    tcs.SetResult(null);
                    return tcs.Task;
                });

            var repository = new MailerRepository(mailFactory.Object, mailIntialezer.Object);

            //Act
            var task = repository.SendMail(email.Object);

            //Assert
            Assert.AreEqual(tcs.Task, task);
            mailIntialezer.Verify(m => m.Initialize(mailMessage.Object, email.Object), Times.Once());
        }
Ejemplo n.º 2
0
        public void SendMailsTest()
        {
            //Arrange
            var emailBuilder1 = new Mock<IEmailBuilder>();
            var emailBuilder2 = new Mock<IEmailBuilder>();
            var mailClient1 = new Mock<IMailClient>();
            var mailClient2 = new Mock<IMailClient>();
            var mailFactory = new Mock<IEmailFactory>();
            var mailIntialezer = new Mock<IEmailInitializer>();

            mailFactory.SetupSequence(m => m.CreateEmailBuilder())
                       .Returns(emailBuilder1.Object)
                       .Returns(emailBuilder2.Object);

            mailFactory.SetupSequence(m => m.CreateMailClient())
                       .Returns(mailClient1.Object)
                       .Returns(mailClient2.Object);
            
            var emailList = new List<EmailBase>() { new Mock<EmailBase>().Object, new Mock<EmailBase>().Object };
            var repository = new MailerRepository(mailFactory.Object, mailIntialezer.Object);

            mailClient1.Setup(m => m.Send(It.IsAny<IEmailBuilder>())).Returns(() =>
                {
                    var tcs = new TaskCompletionSource<object>();
                    tcs.SetResult(null);
                    return tcs.Task;
                });
            mailClient2.Setup(m => m.Send(It.IsAny<IEmailBuilder>())).Returns(() =>
                {
                    var tcs = new TaskCompletionSource<object>();
                    tcs.SetResult(null);
                    return tcs.Task;
                });
            
            //Act
            var task = repository.SendMails(emailList);
            task.Wait();

            //Assert
            mailIntialezer.Verify(m => m.Initialize(emailBuilder1.Object, emailList[0]), Times.Once());
            mailIntialezer.Verify(m => m.Initialize(emailBuilder2.Object, emailList[1]), Times.Once());
            mailClient1.Verify(m => m.Send(emailBuilder1.Object), Times.Once());
            mailClient2.Verify(m => m.Send(emailBuilder2.Object), Times.Once());
        }