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()); }
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()); }