One problem I've run into, is that these things tend to proliferate into a dozen or so global things that people need to remember to deal with (clean up and/or configure) in the test environment.
Since my brain doesn't do memory well, I start getting intermittent test failures from interacting tests that can be painful to debug.
Another problem is that they tend to make the test environment really slow because the fix is often to add a pre or post handler to every single test globally.
Also, the feature might be designed for environment A, but later need to run in environment B. Global state patterns tend to blow up when that happens.
The DB::SetupMock() thing tends to work okay for direct consumers, it's bad when the transitive dependencies need to start doing that for 6-10 different services.
FWIW, I commented elsewhere with an alternative structure that's been working well for me with a different set of trade-offs.
Also FWIW, I've been fighting against global state for so many years, it makes me really sad to see it getting promoted again.
Best of intentions here, not trying to be critical, just trying to share some hardwon experience.