Как интегрировать-протестировать сетевое приложение на C - PullRequest
4 голосов
/ 03 декабря 2008

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

Итак, мой вопрос : Учитывая простое однопоточное клиент-серверное сетевое приложение, как бы вы интегрировали и клиента, и сервер в ваш любимый в настоящее время набор тестов (сейчас я использую проверить ).

Я, конечно, хочу изменить набор юнит-тестов для достижения своей цели.

Редактировать : Хотя я ценю ответы, я больше искал какой-то магический способ интеграции интеграционного тестирования в мою структуру модульного тестирования (если это вообще возможно). Например, если fork () или что-то еще можно применить, не получая слишком много побочных эффектов.

Ответы [ 3 ]

4 голосов
/ 04 декабря 2008

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

Выигрыш в том, что вы точно знаете, что будет делать макет (включая фальшивые тайм-ауты, отправку мусора, все, что вы хотите).

Вероятно, было бы очень легко использовать библиотеку сокетов Perl или Python для создания ваших фиктивных серверов и клиентов; если вы используете Perl, вы сможете использовать очень эффективные классы Test :: из CPAN, чтобы помочь выполнить фактическую работу и отчетность.

1 голос
/ 04 декабря 2008

netcat - отличный инструмент для тестирования сетевых серверов и клиентов.

man netcat говорит, что netcat - это швейцарский армейский нож TCP / IP. Имея опыт работы с netcat и швейцарским армейским ножом Victorinox, я могу заверить вас, что netcat намного лучше, чем Victorinox - я бы лучше сравнил его с Leatherman.

0 голосов
/ 03 декабря 2008

Мы структурируем наши приложения таким образом, чтобы основной код находился в библиотеке, а исполняемый файл генерировался из файла main.c (в нашем случае, действительно, main.cxx), который представляет собой очень тонкую оболочку, запускающую сервер или клиент. Это позволяет нам устанавливать наборы тестов, которые могут создавать экземпляры полного сервера и клиента в proc и выполнять тесты, когда они общаются друг с другом, используя свой обычный сетевой протокол. Работает довольно хорошо.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...