TestScope
Creates a TestScope.
It ensures that all the test module machinery is properly initialized.
If context doesn't provide a TestCoroutineScheduler for orchestrating the virtual time used for delay-skipping, a new one is created, unless either
a TestDispatcher is provided, in which case TestDispatcher.scheduler is used;
at the moment of the creation of the scope, Dispatchers.Main is delegated to a TestDispatcher, in which case its TestCoroutineScheduler is used.
If context doesn't have a TestDispatcher, a StandardTestDispatcher is created.
A CoroutineExceptionHandler is created that makes runTest throw after the test is finished if there were any uncaught exceptions, or forwards the exceptions further in a platform-specific manner if by the time an exception happened, the test has completed. Passing a CoroutineExceptionHandler in context is unsupported.
If context provides a Job, that job is used as a parent for the new scope.