[Fact] public void RunCustomerReportBatchShouldSendReports() { // Arrange var customerDataMock = new Mock(); var reportBuilderMock = new Mock(); var emailerMock = new Mock(); var expectedCustomer = new Customer("fist@sea.com"); var expectedReportBody = "the report body"; customerDataMock.Setup(x => x.GetCustomersForCustomerReport()) .Returns(new[] { expectedCustomer }); reportBuilderMock.Setup(x => x.CreateCustomerReport(expectedCustomer)) .Returns(new Report(expectedCustomer.Email, expectedReportBody)); var sut = new ReportingService( customerDataMock.Object, reportBuilderMock.Object, emailerMock.Object); // Act sut.RunCustomerReportBatch(); // Assert emailerMock.Verify(x => x.Send(expectedCustomer.Email, expectedReportBody)); }