Резервный порт-плагин против нового ServerSocket (0) для теста - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть тест Junit, который запускает сервер сокетов и отправляет запросы на него. Обычно я использую reserve-port-plugin для Maven, чтобы выделить случайный порт и передать его через системные свойства для тестирования. Но теперь я прочитал в документации, что new ServerSocket(0) выделяет новый сокет с «автоматически назначенным» номером порта. Javado c говорит:

Номер порта 0 означает, что номер порта назначается автоматически, как правило, из эфемерного диапазона портов.

Выглядеть гораздо проще в использовании new ServerSocket(0), чем настраивать для этого плагин Maven, но неясно, насколько точно работает это "автоматическое распределение". Например, он проверяет наличие открытого разрешения перед выделением? Является ли идентичным использование этих двух подходов для случайного распределения портов в тестах?

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете прочитать исходный код, чтобы понять, как они работают, хотя я подозреваю, что есть некоторые вариации для каждой ОС, на которые я бы не стал полагаться.

Я думаю, что, вероятно, более полезно понять ПОЧЕМУ использовать один против другого. Использование new ServerSocket(0) проще в небольшой области, но может привести к странным привязкам / зависимостям в зависимости от тестируемой системы.

Если, например, вы пытаетесь запустить полный веб-приложение и запустить тесты на селен, я бы порекомендовал решение maven. Попытка предоставить серверный сокет в контейнер сервлета будет либо трудной и хрупкой, либо потенциально невозможной.

С другой стороны, для очень ограниченного теста типа сокета, подход new ServerSocket(0), вероятно, проще.

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