[Fact] public async Task Processing_outstanding_orders_logs_batch_size() { // Arrange var ordersRepositoryMock = new Mock<IOrdersRepository>(); ordersRepositoryMock.Setup(c => c.GetOutstandingOrders()) .ReturnsAsync(GenerateOutstandingOrders(100)); var paymentServiceMock = new Mock<IPaymentService>(); paymentServiceMock .Setup(c => c.CompletePayment(It.IsAny<Order>())) .ReturnsAsync((Order order) => new PaymentTransaction { TransactionId = $"TRX-{order.OrderReference}" }); var loggerMock = new Mock<ILogger<PaymentsProcessor>>(); var sut = new PaymentsProcessor(ordersRepositoryMock.Object, paymentServiceMock.Object, loggerMock.Object); // Act await sut.ProcessOutstandingOrders(); // Assert loggerMock.Verify(c => c.LogInformation("A batch of {0} outstanding orders was completed", 100)); }