我正在尝试为客户端服务器应用程序编写单元测试。为了测试客户端,在我的单元测试中,我想首先启动我的tcp服务器(它本身是另一个perl文件)。我试图通过分叉启动TCP服务器:
if (! fork()) {
system ("$^X server.pl") == 0 or die "couldn't start server"
}
因此,当我在make test
之后调用perl Makefile.PL
时,此测试开始,我可以看到服务器启动,但之后单元测试就会挂起。所以我想我需要在后台启动这个服务器,我在最后尝试&
强制它在后台启动,然后测试继续。但是,我仍然无法成功。我究竟做错了什么?感谢。
答案 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
。