В качестве первого шага, чтобы избежать использования дополнительных конструкторов, которые будут использоваться непреднамеренно: вы можете создать конструкторы, предназначенные для использования только при тестировании private
, и сделать класс тестирования friend
.Это, безусловно, может также использоваться для альтернатив необычному подходу «конструкторы для тестирования»: например, предоставление частных сеттеров для разрешения изменения состояния объекта для тестирования.
Если причина наличия дополнительных конструкторовЭто упрощает настройку теста: может быть более элегантно создавать вспомогательные фабричные функции в вашем тесте.Это создаст правильно настроенные экземпляры base
.Например, у вас могут быть заводские функции, такие как make_base_that_behaves_like_xxx
или make_base_for_xxx
.Затем фабричные функции в идеале должны вызывать «законный» конструктор и выполнять дополнительные адаптации к объекту по мере необходимости.Это может даже привести к более удобочитаемому решению, чем подход с несколькими специализированными конструкторами.
Обратите внимание, что введение специальных конструкторов иногда может быть полезно для решения проблем тестирования с унаследованным кодом, но не настолько, какшаблон проектирования для вновь созданного кода: Перья описывают его под именем Parameterize Constructor .