public async Task ExecuteThrowsForAny()
        {
            var task1 = Substitute.For <IStartupTask>();

            var task2 = Substitute.For <IStartupTask>();

            task2.ExecuteAsync(Arg.Any <CancellationToken>())
            .Throws(new InvalidOperationException());

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

            var executor = new StartupTaskExecutor(new[] { task1, task2 }, logger);
            await Assert.ThrowsAsync <InvalidOperationException>(
                async() => await executor.ExecuteAsync(CancellationToken.None));
        }
        public async Task ExecutesAll()
        {
            var task1  = Substitute.For <IStartupTask>();
            var task2  = Substitute.For <IStartupTask>();
            var logger = Substitute.For <ILogger <StartupTaskExecutor> >();

            var executor = new StartupTaskExecutor(new [] { task1, task2 }, logger);
            await executor.ExecuteAsync(CancellationToken.None);

            await task1.Received(1)
            .ExecuteAsync(Arg.Any <CancellationToken>());

            await task2.Received(1)
            .ExecuteAsync(Arg.Any <CancellationToken>());
        }