我正在为使用IO :: Socket :: INET的Perl模块编写一些单元测试,所以我想使用Test :: MockObject模拟IO :: Socket :: INET模块。
Sp远我有类似
的东西$INC{'IO/Socket/INET.pm'} = 1;
my $inet = Test::MockObject->new();
$inet->fake_module('IO::Socket::INET', new => sub { $inet });
但我正在测试的模块中的代码具有类似
的代码my $server = IO::Socket::INET->new(...);
my $data = <$server>
当我运行测试时,我在尝试执行角度运算符时遇到类似“Not a GLOB reference”的错误。
我需要添加什么才能使我的模拟对象引用看起来像文件句柄,以便运行此代码?
答案 0 :(得分:1)
您可以使用overload创建自己的模拟INET类,它将提供自己的<>
运算符实现。如下所示:
package My::MockINET;
use strict;
use warnings;
use overload '<>' => \&_readline;
sub new {
return bless { }, shift;
}
sub _readline {
return "some data here\n";
}
1;
然后你就可以使用它:
$INC{'IO/Socket/INET.pm'} = 1;
my $inet = My::MockINET->new();
my $data = <$inet>;