Was du beschreibst, hat nur bedingt mit TDD zu tun.
Das Wurzelproblem liegt in dem, was du ganz natürlich findest: "Mock injizieren".
Du bist ein Opfer der funktionalen Abhängigkeiten, die mit SOLID nicht verschwinden, sondern nur hinter einem Feuerwerk an Interfaces und Mocks verborgen werden.
Wenn du mal aufhörst, funktionale Abhängigkeiten herzustellen, dann beruhigt sich das Bild.
Ich benutze seit Jahren keine Mock-Frameworks mehr und mocke nur selten. Aber ich sehe nicht, dass meine Software deshalb fehlerlastig ist.
Vergiss SOLID! Stattdessen: IOSP (Integration Operation Segregation Principle) und PoMO (Principle of Mutual Oblivion).
Wenn du sauber Integration von Operation als formale Verantwortlichkeiten trennst, löst du funktionale Abhängigkeiten auf. Logik, die du testen musst, ist nicht mehr abhängig von anderer, die du mocken müsstest. Voila!