如何使用 Test::MockObject 模拟 IO::Socket::INET
我正在为使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用重载来创建您自己的模拟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:Then you can use it like: