Прежде всего, необязательно, что ваши классы могут быть хорошо спроектированы для их использования, но плохо спроектированы для тестирования. Не все легко проверить.
Предположительно, вы хотите использовать другую функцию или класс, который использует класс, который вы хотите смоделировать (иначе решение тривиально). Давайте назовем первого «пользователя», а второго «издеваться». Вот несколько возможностей:
- Измените Пользователя на использование абстрактной версии Mocked (вы можете выбрать, какую абстракцию использовать: наследование, обратный вызов, шаблоны и т. Д ....).
- Скомпилируйте другую версию Mocked для вашего кода тестирования (например, #def из кода RAII при компиляции ваших тестов).
- Пусть Mocked принимает флаг конструктора, чтобы отключить его поведение. Лично я бы избегал этого.
- Просто возьмите на себя расходы по выделению ресурса.
- Пропустить тест.
Последние два могут быть вашим единственным выходом, если вы не можете изменить User или Mocked. Если вы можете изменить User и считаете, что разработка кода для тестируемости важна, тогда вам следует изучить первый вариант, прежде чем какой-либо другой. Обратите внимание, что может быть компромисс между тем, чтобы сделать ваш код универсальным / гибким и сделать его простым, и то, и другое - замечательные качества.