Перво-наперво: что вы тестируете?Ваш метод или сама служба REST?
Поскольку вы говорите "мы не можем выполнить модульное тестирование нашего класса HttpLog" , я полагаю, вы пытаетесь протестировать свой класс.
Следовательно, вы должны протестировать его без службы REST (которая является внешней зависимостью).REST-клиент должен быть внедрен как зависимость, поэтому его можно легко смоделировать.
Мы не используем внедрение зависимости, поскольку мы создаем утилиту.
То естьнедопустимый аргумент для пропуска внедрения зависимостей.
Примечание. Из вашего утверждения я делаю вывод, что вы знаете, как реализовать внедрение зависимостей, вы просто решили не делать этого.Я собираюсь опустить реальный пример внедрения зависимостей, поэтому этот ответ может сосредоточиться на основной проблеме: ваше решение не использовать внедрение зависимостей.
- Перегрузка конструктора (которая являетсяне эффективный способ только для модульного тестирования)
Это побеждает точку тестирования.Вы создаете другой путь к коду для своего теста и своего (реального) времени выполнения, что означает, что тест больше не (полностью) проверяет выполнение кода времени выполнения.
В настоящее время ваш конструктор только создает экземпляры остальныхклиент, так что вы не много компромисс.Но то же самое не применимо, если конструктор сделал больше, чем просто.Во-вторых, вы не сможете обнаружить какие-либо регрессии, если тестируете конструктор, отличный от реального, который вы используете во время выполнения.
сделать собственность клиента общедоступной {get;set}, который также нарушает принцип ООП.
Ваше второе предложение прямо доказывает, что вы готовы (и пытаетесь) внедрить зависимость .Вы просто пытаетесь внедрить его через общедоступное свойство вместо параметра конструктора.
Вы правы в том, что использование общедоступного свойства не является хорошим решением, так как оно открывает двери для других проблем.
Сравнительно, использование параметра конструктора обеспечивает те же функциональные возможности (публичный выбор клиента) безкомпрометация инкапсуляции (неспособность изменить клиента в течение срока жизни объекта).
Следовательно, ответом будет использовать внедрение зависимостей .