Как вы unit test для подключения tcp?
Недавно мне была предоставлена возможность написать простой tcp-клиент для моего проекта, и из-за моего огромного незнания с tcp/ip мне трудно заставить его работать правильно.
Я нахожу, что иногда я могу получить странную проблему с подключением, когда соединение отказалось, поскольку сервер tcp не работает, или иногда я могу получить исключение при вызове receive.
Поскольку tcp-сервер является черным ящиком, и у нас нет доступа к нему, мне интересно в этой ситуации, что лучший способ написать для него единичные тесты?
Я думаю, что я должен написать tcp-сервер и заставить его возвращать определенные входы как то, что я ожидаю от реального сервера, или просто издеваться над функциями, связанными с возвратом идеальных данных о ситуации.
Мне просто не нравится тот факт, что иногда я могу получить странную проблему подключения/получения, и я хотел бы знать, как правильно писать unit test, который я могу повторно использовать/продлить в будущем, чтобы гарантировать, что все, что работает до должен по-прежнему работать в случае изменения кода или кода.
спасибо
Ответы
Ответ 1
У вас должно быть два типа тестов:
- Интеграционные тесты - с реальным голосом TCP-сервером, который может отправлять и
получать соединения. Создайте этот сервер с минимальным минимумом
и использовать его, чтобы проверить, как ведет себя ваш клиент. Используя
простой TCP-сервер, вы можете проверить, как ваш клиент отправляет и получает
сообщения и как он соединяется и отключается от сервера. Другая
полезным испытанием является то, как несколько клиентов подключаются и отправляют сообщения на
сервер.
- Единичные тесты. Используя Mocking, вы можете протестировать более сложные сценарии. Вы
не смогут отправлять или получать сообщения, но вы можете проверить
внутренняя логика клиента - как он себя ведет, если два сообщения с
прибыть, повторно отправить в случае ошибок и т.д.
Используя оба типа тестов, вы сможете охватить большую часть вашей клиентской функциональности
Ответ 2
Для модульного тестирования я бы создал простой сервер сокетов (стартовал при запуске UT) только для тестирования клиента. Если вы сделаете это простым и автономным, вы уменьшите количество проблем, связанных с тестированием. Вы также можете использовать такие инструменты, как ncat, чтобы облегчить это.
Однако, заявив, что могут возникнуть проблемы, которые могут быть труднее для UT забрать. Проблемы с сохранением, возможно, внешние проблемы, такие как маршрутизация. Но если вы используете настоящий прослушивающий сокет (в отличие от насмешивания соединения), он действительно TCP.