When hooks run dynamic tests they handle the calls to report methods (startTest(), endTest(), etc.), the execution of the tests and error handling. Several hooks have implemented the same logic in similar but not identical ways.
A subclass of TestCase specific to dynamic tests will be added to handle this logic. Each hook will then be updated to have their own TestCase implementations.
To support these changes, the TestCase code that is specific to process based tests (i.e. _execute(), _make_process()) will be moved to a subclass.