public async Task RunAsyncOnStartFalse()
        {
            var run = Substitute.For <IRunnable>();

            run.Start().Returns(false);

            var rs = new TaskServiceFake(run);

            await rs.RunTest(CancellationToken.None);

            run.Received().Start();
        }
        public async Task RunAsync()
        {
            var run = Substitute.For <IRunnable>();

            run.Start().Returns(true);

            var rs = new TaskServiceFake(run);

            var ct = new CancellationToken(true);

            await rs.RunTest(ct);

            run.Received().Start();
            run.Received().Stop();
        }
        public async Task RunAsyncWithLoop()
        {
            var run = Substitute.For <IRunnable>();

            run.Start().Returns(true);

            var rs = new TaskServiceFake(run);

            var ct = new CancellationTokenSource();

            using (var t = new Timer(new TimerCallback((object obj) => { ct.Cancel(); }), null, 3, Timeout.Infinite))
            {
                await rs.RunTest(ct.Token);

                run.Received().Start();
                run.Received().Stop();
            }
        }