Как вы тестируете модуль для TCP-соединения? - PullRequest
12 голосов
/ 08 ноября 2011

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

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

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

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

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

спасибо

Ответы [ 2 ]

14 голосов
/ 10 ноября 2011

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

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

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

1 голос
/ 08 ноября 2011

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

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

...