我正在为使用IO::Socket::INET的Perl模块编写一些单元测试,因此我想使用Test::MockObject模拟IO::Socket::INET模块。
到目前为止我有像这样的东西
$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“的错误。
我需要添加什么才能使我的模拟对象引用看起来像一个文件句柄,以便运行此代码?
发布于 2011-10-05 23:30:52
您可以使用overload创建自己的mock 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>;https://stackoverflow.com/questions/7662817
复制相似问题