@ Дэвид, я вижу, что юнит-тестирование для вас делает работу, которую он должен делать.
Вы размышляете над дизайном своего программного обеспечения.
Исходя из того, как вы задаете свой вопрос о закрытой и открытой средах, я могу поверить, что вы на пороге необходимости отвечать на вопрос о модульном тестировании на основе состояния или поведения для вашего кода.
Не существует жесткого правила быстрого использования реального объекта или макета для юнит-тестирования. ТОЛЬКО РУКОВОДЯЩИЕ ПРИНЦИПЫ! Проблема модульного тестирования с реальным объектом Logging
состоит в том, что тесты для этого объекта будут заключаться не только в модульных тестах для регистратора, но и в модульных тестах для объектов, использующих регистратор.
Таким образом, если у вас есть 20 объектов, которые используют регистратор, и когда вы измените интерфейс регистратора, будет не менее 21 неудачного теста. Это может быть довольно болезненным при рефакторинге. Но, с другой стороны, если вы не используете класс регистратора в модульных тестах из 20 объектов и изменили интерфейс регистратора, у вас есть только один неудачный тест и 20 других модульных тестов, которые становятся зелеными, даже если они потерпят неудачу в производстве.
Единственное понимание, которое я действительно могу вам дать, это то, что у вас нет правильных абстракций. Возможно, вы захотите посмотреть SOLID . Это должны быть руководящие принципы.
Помните, что когда возникают вопросы, например, когда вы спрашиваете, это код, который дает вам обратную связь. Обратите внимание на эту обратную связь. Это спасет вас от боли позже.