Я против всех этих рекомендаций по автоматическому предоставлению дружбы на тестовые занятия ...
Лично я предпочитаю сосредоточиться на следующем, чтобы предоставить мне доступ к внутренностям класса, который мне нужно проверить:
- Положитесь на общедоступный интерфейс
класс, где это возможно; иногда это означает немного расширить публичный интерфейс, чтобы упростить тестирование. Не боритесь с этими расширениями слишком сильно, но и не позволяйте им слишком сильно управлять вашим дизайном ...
- Рассмотрите возможность добавления интерфейса мониторинга, который
может также использоваться «реальным» кодом
в качестве тестового кода, чтобы включить мониторинг
тестируемый код. (Я до сих пор удивляюсь тому, как часто это действительно хорошая часть процесса проектирования).
- Рассмотрите возможность предоставления доступа к некоторым частям класса производным классам через «защищенный интерфейс» и получите «тестируемую» версию рассматриваемого класса, которая затем может быть инструментирована и протестирована.
Подводя итог, я предпочитаю видеть дизайн в контрольных точках, а не общую дружбу с тестовым классом. Конечно, первое сложнее, чем второе, но, ИМХО, приводит к лучшему коду и лучшим тестам.