public async Task RunProcessingAsyncProcessMessagesCorrectlyAsync()
        {
            // Arrange
            var fetcher       = new Mock <IOutboxFetcher>();
            var scopedFactory = new Mock <IServiceScopeFactory>();
            var ilogger       = new Mock <ILogger <Outbox> >();
            var outBox        = new Outbox(fetcher.Object, scopedFactory.Object, ilogger.Object);
            var tokenSource   = new CancellationTokenSource();

            var msg = new TestMessage();

            fetcher.Setup(x => x.ReadOutboxMessagesAsync(tokenSource.Token)).ReturnsAsync(new[] { msg });
            var scope = new Mock <IServiceScope>();

            scopedFactory.Setup(x => x.CreateScope()).Returns(scope.Object);
            var provider = new Mock <IServiceProvider>();

            scope.Setup(x => x.ServiceProvider).Returns(provider.Object);
            var processor = new Mock <IOutboxMessageProcessor>();

            provider.Setup(x => x.GetService(typeof(IOutboxMessageProcessor))).Returns(processor.Object);

            // Act
            var exception = await Record.ExceptionAsync(async() => await outBox.RunProcessingAsync(tokenSource.Token));

            // Assert
            exception.Should().BeNull();
            fetcher.Verify(x => x.ReadOutboxMessagesAsync(tokenSource.Token), Times.Once);
            scopedFactory.Verify(x => x.CreateScope(), Times.Once);
            scope.Verify(x => x.ServiceProvider, Times.Once);
            provider.Verify(x => x.GetService(typeof(IOutboxMessageProcessor)), Times.Once);
            processor.Verify(x => x.TryProcessAsync(msg, tokenSource.Token), Times.Once);
            scope.Verify(x => x.Dispose(), Times.Once);
        }