In reply to ABD_91:
Your example uses the factory, so it doesn’t fully represent the question asked. However, if you remove the factory registration and use new() to create your top-level component, it still functions correctly. Not using the factory with your tests requires you to manually create your top-level component, so you lose the flexibility of selecting a test at runtime using the +UVM_TESTNAME option.
You are correct that if you create a component outside of the existing hierarchy (by using ‘null’ as a parent), then the scheduler will call the phases of that component. However, only the phases after the phase that the component was created will be called.
For example, if you create a component with a null parent in the build_phase(), you will need to manually that component’s build_phase(). All subsequent phases will be called by the UVM scheduler.