<div dir="ltr">Привет! Тоже недавно с этим разбирался. Видимо самый простой вариант сделать автоматические приёмочные тесты, то есть вы запускаете свою программу как чёрный ящик и проверяете результат, если это возможно. Так же можно обложить юнит тестами всё вокруг fork. Если всё же нужно протестировать код, который форкается, в простом случае можете проверить как отработает parent процесс. Простой пример:<div><div>sub test_code_with_fork {</div><div>    my ($self) = @_;</div><div><br></div><div>    my $parent = $$;</div><div>    my $res;</div><div>    eval {</div><div>        $res = MyModuleWithFork::run(command => ['test_command']);</div><div>    };</div><div>    if ($parent == $$) {</div><div>        is($@, '');</div><div>        cmp_deeply(</div><div>            {'my_return_value' => 1},</div><div>            $res</div><div>        );</div><div><br></div><div>    }</div><div>    else {</div><div>        exit;</div><div>    }</div><div>}</div></div><div>Если не сделать exit для child процесса, результат будет непредсказуемым.</div><div>По поводу <span style="font-size:12.800000190734863px">Test::Fork - он подойдёт, если вам нужен форк сделать из теста (</span><span style="color:rgb(0,0,0);font-family:Menlo,Monaco,"DejaVu Sans Mono",Consolas,"Bitstream Vera Sans Mono",Courier,"Courier New",monospace;font-size:12px;white-space:pre;background-color:rgb(245,245,245)">fork_ok делает </span><font color="#000000" face="Menlo, Monaco, DejaVu Sans Mono, Consolas, Bitstream Vera Sans Mono, Courier, Courier New, monospace"><span style="font-size:12px;white-space:pre">внутри fork).</span></font></div><div>Возможно кто-нибудь предложить что-то получше.</div></div><div class="gmail_extra"><br><div class="gmail_quote">4 декабря 2017 г., 14:26 пользователь Коваль Вячеслав via Moscow-pm <span dir="ltr"><<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Можете посмотреть на модули (не использовал) Test::Fork, Test::MultiFork, Test::SharedFork</div><div>Либо можете посмотреть как реализовано "Fork Safety" в модуле DBIx::Connector</div><div>04.12.2017, 09:57, "Генерал Фейлор via Moscow-pm" <<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>>:</div><div class="HOEnZb"><div class="h5"><blockquote type="cite"><p>Добрый день!<br><br>Озадачился вопросом написания Unit-тестов на модуль, в котором<br>используется fork. Столкнулся с проблемой, когда даже при единичном<br>форке нарушена последовательность тестов. В качестве примера - вывод:<br><br># Looks like you planned 12 tests but ran 9.<br>Dubious, test returned 255 (wstat 65280, 0xff00)<br>All 12 subtests passed<br><br>Test Summary Report<br>-------------------<br>./my_dear_test.t (Wstat: 65280 Tests: 12 Failed: 0)<br>   Non-zero exit status: 255<br>   Parse errors: Tests out of sequence. Found (6) but expected (9)<br>                 Tests out of sequence. Found (7) but expected (10)<br>                 Tests out of sequence. Found (8) but expected (11)<br>                 Tests out of sequence. Found (9) but expected (12)<br><br>Поделитесь, пожалуйста, кто и как пишет подобные тесты?</p><span>--<br>Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank">http://moscow.pm.org</a></span></blockquote><div> </div><div> </div></div></div><span class="HOEnZb"><font color="#888888"><div>-- <br>Яндекс.Почта — надёжная почта</div><div><a href="http://mail.yandex.ru/neo2/collect/?exp=1&t=1" target="_blank">http://mail.yandex.ru/neo2/<wbr>collect/?exp=1&t=1</a></div><div> </div></font></span><br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>