Perl模块Test :: MockModule和调用者

时间:2013-09-16 14:09:01

标签: perl mocking

我正在寻找一种方法,通过使用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()调用它?

1 个答案:

答案 0 :(得分:1)

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

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

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