Большинство фальшивых фреймворков полагаются на ту или иную форму МОК. Это потому, что МОК на самом деле является хорошей практикой. Помимо тестирования, представьте, что у вас есть класс, который ищет соединение с базой данных (а не вводит его), и теперь класс соединения с базой данных изменяется. Вам не нужно перекомпилировать свой код - вы должны просто иметь возможность изменить введенную зависимость. С точки зрения тестирования, вы можете сделать то же самое, внедрить фиктивный сервис базы данных.
Чтобы получить больше к вашему вопросу. Я бы сконцентрировался на постепенном рефакторинге для инъекций вместо жестко закодированной структуры поиска. Начните с больших частей, таких как базы данных и другие сторонние сервисы. Когда вы реорганизуете их, вы можете использовать любую фальшивую среду (я использовал EasyMock, и мне это нравится, но есть и другие - JMock, Mockito). Эти платформы не требуют классов-оболочек, но обычно полагаются на прокси-объекты. Когда вы создаете макет, вы фактически создаете прокси (который является экземпляром класса, над которым вы издеваетесь).
Манипулирование байт-кодом (например, Aspect Oriented, когда используется Typemock) может быть опасным, чтобы полагаться на него тяжело. Часто у вас могут быть другие инструменты, которые также манипулируют байт-кодом (часто это делают инструменты покрытия кода), и множественные манипуляции с байт-кодом могут вызвать неожиданное поведение.
Наконец, вы можете посмотреть на такие языки, как Groovy. Groovy хорошо работает с Java (он компилируется в байт-код) и имеет встроенный макет прямо в язык. Некоторые поиски в Google для поиска фиктивных объектов в Groovy должны давать хорошие результаты.