public async Task StartAsync_should_process_pending_messages()
        {
            var processor = NSubstitute.Substitute.For <IOutboxProcessor>();
            var sp        = NSubstitute.Substitute.For <IServiceProvider>();

            sp.GetService(typeof(IOutboxProcessor))
            .Returns(processor);

            var scope = NSubstitute.Substitute.For <IServiceScope>();

            scope.ServiceProvider.Returns(sp);

            var factory = NSubstitute.Substitute.For <IServiceScopeFactory>();

            factory.CreateScope().Returns(scope);

            var logger = NSubstitute.Substitute.For <ILogger <OutboxBackgroundService> >();

            var sut = new OutboxBackgroundService(factory, OutboxProcessorOptions.Default, logger);

            var tokenSource = new CancellationTokenSource();
            await sut.StartAsync(tokenSource.Token);

            await Task.Delay(200);

            await processor.Received()
            .ProcessPendingMessagesAsync(Arg.Any <CancellationToken>());
        }
        public async Task StartAsync_should_start_subscribers()
        {
            var cleaner = NSubstitute.Substitute.For<IOutboxProcessor>();
            var sp = NSubstitute.Substitute.For<IServiceProvider>();
            sp.GetService(typeof(IOutboxProcessor))
                .Returns(cleaner);

            var scope = NSubstitute.Substitute.For<IServiceScope>();
            scope.ServiceProvider.Returns(sp);

            var factory = NSubstitute.Substitute.For<IServiceScopeFactory>();
            factory.CreateScope().Returns(scope);

            var sut = new OutboxBackgroundService(factory, OutboxProcessorOptions.Default);

            var tokenSource = new CancellationTokenSource();
            await sut.StartAsync(tokenSource.Token);

            await cleaner.Received(1)
                .ProcessPendingMessagesAsync(Arg.Any<CancellationToken>());
        }