public void WaitsForTheWorkerToComplete()
        {
            using var target = new PooledWorker(cache.Object, worker.Object);
            target.WaitForCompletion();

            worker.Verify(o => o.WaitForCompletion(), Times.Once);
        }
        public void RunTheWorkerSynchronouslyAsExpected()
        {
            using var target = new PooledWorker(cache.Object, worker.Object);
            target.Run();

            worker.Verify(o => o.Run(), Times.Once);
        }
        public void ThrowsAnExceptionWhenAfterDispose()
        {
            var target = new PooledWorker(cache.Object, worker.Object);

            target.Dispose();

            Assert.Throws <ObjectDisposedException>(() => target.Run());
        }
        public async Task WaitsForTheWorkerToCompleteAsynchronously()
        {
            worker.Setup(o => o.WaitForCompletionAsync()).Returns(Task.CompletedTask);

            using var target = new PooledWorker(cache.Object, worker.Object);
            await target.WaitForCompletionAsync();

            worker.Verify(o => o.WaitForCompletionAsync(), Times.Once);
        }