如何在Perl单元测试期间在后台启动TCP服务器?

时间:2010-04-16 01:15:16

标签: perl unit-testing fork

我正在尝试为客户端服务器应用程序编写单元测试。为了测试客户端,在我的单元测试中,我想首先启动我的tcp服务器(它本身是另一个perl文件)。我试图通过分叉启动TCP服务器:

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

因此,当我在make test之后调用perl Makefile.PL时,此测试开始,我可以看到服务器启动,但之后单元测试就会挂起。所以我想我需要在后台启动这个服务器,我在最后尝试&强制它在后台启动,然后测试继续。但是,我仍然无法成功。我究竟做错了什么?感谢。

1 个答案:

答案 0 :(得分:1)

1。试试Ether's suggestion from a similar 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