Подтвердить что ты не робот

Как вы unit test для подключения tcp?

Недавно мне была предоставлена ​​возможность написать простой tcp-клиент для моего проекта, и из-за моего огромного незнания с tcp/ip мне трудно заставить его работать правильно.

Я нахожу, что иногда я могу получить странную проблему с подключением, когда соединение отказалось, поскольку сервер tcp не работает, или иногда я могу получить исключение при вызове receive.

Поскольку tcp-сервер является черным ящиком, и у нас нет доступа к нему, мне интересно в этой ситуации, что лучший способ написать для него единичные тесты?

Я думаю, что я должен написать tcp-сервер и заставить его возвращать определенные входы как то, что я ожидаю от реального сервера, или просто издеваться над функциями, связанными с возвратом идеальных данных о ситуации.

Мне просто не нравится тот факт, что иногда я могу получить странную проблему подключения/получения, и я хотел бы знать, как правильно писать unit test, который я могу повторно использовать/продлить в будущем, чтобы гарантировать, что все, что работает до должен по-прежнему работать в случае изменения кода или кода.

спасибо

4b9b3361

Ответ 1

У вас должно быть два типа тестов:

  • Интеграционные тесты - с реальным голосом TCP-сервером, который может отправлять и получать соединения. Создайте этот сервер с минимальным минимумом и использовать его, чтобы проверить, как ведет себя ваш клиент. Используя простой TCP-сервер, вы можете проверить, как ваш клиент отправляет и получает сообщения и как он соединяется и отключается от сервера. Другая полезным испытанием является то, как несколько клиентов подключаются и отправляют сообщения на сервер.
  • Единичные тесты. Используя Mocking, вы можете протестировать более сложные сценарии. Вы не смогут отправлять или получать сообщения, но вы можете проверить внутренняя логика клиента - как он себя ведет, если два сообщения с прибыть, повторно отправить в случае ошибок и т.д.

Используя оба типа тестов, вы сможете охватить большую часть вашей клиентской функциональности

Ответ 2

Для модульного тестирования я бы создал простой сервер сокетов (стартовал при запуске UT) только для тестирования клиента. Если вы сделаете это простым и автономным, вы уменьшите количество проблем, связанных с тестированием. Вы также можете использовать такие инструменты, как ncat, чтобы облегчить это.

Однако, заявив, что могут возникнуть проблемы, которые могут быть труднее для UT забрать. Проблемы с сохранением, возможно, внешние проблемы, такие как маршрутизация. Но если вы используете настоящий прослушивающий сокет (в отличие от насмешивания соединения), он действительно TCP.