Как запустить TCP-сервер в фоновом режиме во время модульного тестирования Perl? - PullRequest
2 голосов
/ 16 апреля 2010

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

if (! fork()) {
    system ("$^X server.pl") == 0 or die "couldn't start server"
}

Поэтому, когда я звоню make test после perl Makefile.PL, запускается этот тест, и я вижу, что сервер запускается, но после этого там просто зависает модульный тест. Поэтому я думаю, что мне нужно запустить этот сервер в фоновом режиме, и я попытался & в конце, чтобы заставить его запускаться в фоновом режиме, а затем проверить, чтобы продолжить. Но я все еще не смог добиться успеха. Что я делаю неправильно? Спасибо.

1 Ответ

1 голос
/ 16 апреля 2010

1. Попробуйте предложение Эфира из аналогичного Q :

    use Proc::Daemon;
    # do everything you need to do before forking the child...

    # make into daemon; closes all open fds
    Proc::Daemon::Init();

2. Если вы используете IO::Socket для своих соединений TCP (или любого другого модуля - CPAN или вашего собственного), вам действительно следует использовать макет (например, Test::MockObject) для имитации фактической связи сокетов. Таким образом, тест вашего клиента (или сервера в этом отношении) будет изолирован от другого фрагмента кода при тестировании (хотя вам все еще нужно, чтобы сервер работал - но на этот раз вручную все в порядке), чтобы записать начальные вызовы, которые нужно смоделировать IO::Socket.

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