gpt4 book ai didi

perl mockmodule fork

转载 作者:行者123 更新时间:2023-12-01 12:55:08 25 4
gpt4 key购买 nike

我正在尝试使用 mockmodule 模拟对 fork 的调用。我是这样设置的...

my $mock = Test::MockModule->new('Foo');
$modMock->mock(fork => sub { print "here"; return 0; });

我的模块是 Foo.pm。我有过将其他模块调用加载到被测模块的经验,并且像这样模拟模块调用似乎效果很好。然而,我的模拟打印语句从未达到(真正的 fork 被调用)。

这是像 fork 一样模拟系统调用的正确方法吗?我应该加载与被测系统不同的模块吗?

最佳答案

您的代码正在将子例程定义分配给名称 &Foo::fork,您始终可以通过调用完全限定的函数名称 Foo::fork() 来执行它> 或在 Foo 命名空间中使用印记 &fork

package Foo;
TestModule->new('Foo')->mock(fork => sub { ... });

Foo::fork; # calls mocked function
⋔ # calls mocked function
{ package Bar; &fork } # error: no &Bar::fork
fork; # calls builtin

重写一个内置函数,以便对一个裸fork 的调用调用您的函数而不是内置函数“may be done only by importing the name from a module at compile time”。如果这很难理解,只需要知道 subs pragma 就可以满足这个条件:

package Foo;
use subs 'fork'; # compile-time import of name 'fork'
TestModule->new('Foo')->mock(fork => sub { ... });

Foo::fork; # calls mocked function
⋔ # calls mocked function
fork; # now calls mocked function
{ package Bar; fork; } # calls builtin
CORE::fork; # always calls builtin

关于perl mockmodule fork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10182894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com