如何使用 Test::MockObject 模拟 IO::Socket::INET

发布于 2024-12-08 03:30:40 字数 504 浏览 0 评论 0原文

我正在为使用 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>

,当我运行测试时,当它尝试执行角度运算符时,我会收到类似“不是 GLOB 引用”的错误。

我需要添加什么才能使我的模拟对象引用看起来像文件句柄以便此代码运行?

I'm writing some unit tests for a Perl module that uses IO::Socket::INET, so I'd like to mock out the IO::Socket::INET module using Test::MockObject.

Sp far I have something like

$INC{'IO/Socket/INET.pm'} = 1;
my $inet = Test::MockObject->new();
$inet->fake_module('IO::Socket::INET', new => sub { $inet });

but the code in the module I'm testing has code like

my $server = IO::Socket::INET->new(...);
my $data = <$server>

and when I run the test I get an error like "Not a GLOB reference" when it tries to execute the angle operator.

What do I need to add to make my mock object reference look like a file handle so that this code runs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆伤 2024-12-15 03:30:40

您可以使用重载来创建您自己的模拟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>;

You can use overload to make your own mock INET class that will provide its own implementation of the <> operator. Something like the following:

package My::MockINET;

use strict;
use warnings;

use overload '<>' => \&_readline;

sub new { 
    return bless { }, shift;
}

sub _readline { 
    return "some data here\n";
}

1;

Then you can use it like:

$INC{'IO/Socket/INET.pm'} = 1;
my $inet = My::MockINET->new();

my $data = <$inet>;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文