我正在寻找一种方法,通过使用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'
而不是'My::New::B'
。有没有办法告诉My::Calc::C()
被模拟的My::New::B()
而不是main::test()
调用它?
答案 0 :(得分:1)
package
关键字设置当前的调用包。您可以将其括在大括号中以将其限制在特定范围内:
my $module = Test::MockModule->new('My::New');
$module->mock( B => sub($$)
{
my ($first, $second) = @_;
{
package My::New::B;
My::Calc::C();
}
} );