Я собираюсь ответить на ваш вопрос в том виде, в котором он был задан, вместо того, чтобы перепроектировать ваш класс (у других это есть, но основной вопрос о классе в том виде, в котором он написан, все еще действителен).
Модульное тестирование никогда не тестирует ничего, кроме тестируемого класса. Это навредило моему мозгу на некоторое время - это означает, что модульное тестирование никоим образом не доказывает, что ваш код работает! Это доказывает, что ваш код работает так же, как и при написании теста.
Итак, вы сказали, что вам нужен модульный тест для этого класса, но вы также хотите функциональный тест.
Для модульного теста вы должны быть в состоянии "отключить" связь. Чтобы сделать это вместо создания собственного сокета, возьмите его из «фабрики сокетов», а затем создайте фабрику сокетов. Фабрика должна быть передана конструктору этого класса, который вы тестируете. Это на самом деле неплохая стратегия проектирования - вы можете установить имя хоста и порт на заводе, чтобы вам не приходилось знать о них в вашем классе связи - более абстрактно.
Теперь в тестировании вы просто проходите на фиктивной фабрике, которая создает фиктивные розетки, и все это розы.
Не забудьте хотя бы функциональный тест! Настройте «тестовый сервер», к которому вы можете подключиться, отправьте несколько сообщений на сервер и протестируйте полученные ответы.
В этом отношении вы, вероятно, захотите провести еще более глубокие функциональные тесты, в которых вы пишете клиент, который отправляет REAL-серверу некоторые скриптовые команды и проверяет результаты. Возможно, вы даже захотите создать команду «Сброс состояния» только для функционального тестирования. Функциональные тесты фактически гарантируют, что целые «функциональные блоки» работают вместе, как вы ожидаете, - то, что многие сторонники модульного тестирования забывают.