Я согласен с оценкой Маккабра со ссылкой на причины (я думаю, что рефакторинг того стоит), но что касается механики ...
В Visual Studio вы можете определить любое количество конфигураций, кроме «Отладка» и «Выпуск», как на уровне решения, так и на уровне проекта. Таким образом, вы можете создать конфигурацию «Testing», скорее всего, на основе конфигурации Debug. Затем создайте конфигурацию «Тестирование» в проекте, который содержит класс фабрики.
В окне свойств проекта выберите вкладку «Сборка». Выберите конфигурацию «Тестирование» и определите условный символ компиляции: «ТЕСТИРОВАНИЕ».
Теперь в вашем коде вы можете использовать
#if TESTING
// build stubs
#else
// build real implementations
#endif