gpt4 book ai didi

Perl 模块 Test::MockModule 和调用者

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

我正在寻找一种方法来测试子例程,方法是使用 perl 模块 Test::MockModule 模拟它调用的子例程。

假设我们测试一个子 My::Module::A()。它调用子 My::New::B()。为了测试 My::Module::A(),我模拟了 My::New::B()。然而,My::New::B() 调用另一个子 My::Calc::C() 来进行一些计算。必须在模拟子中调用 My::Calc::C()

    my $module = Test::MockModule->new('My::New');
$module->mock( B => sub($$)
{
my ($first, $second) = @_;

My::Calc::C();
} );

My::Calc::C() 需要知道谁调用了它,但是作为调用者它收到的是 'main::test' 而不是 '我的::新的::B'。有没有办法告诉 My::Calc::C() 它是由模拟的 My::New::B() 而不是 调用的>main::test()?

最佳答案

package 关键字设置当前调用包。您可以将其括在大括号中以将其限制在特定范围内:

my $module = Test::MockModule->new('My::New');
$module->mock( B => sub($$)
{
my ($first, $second) = @_;

{
package My::New::B;
My::Calc::C();
}
} );

关于Perl 模块 Test::MockModule 和调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830104/

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