3

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

假设我们测试一个 sub My::Module::A()。它调用 sub My::New::B()。为了测试My::Module::A(),我嘲笑My::New::B()My::New::B()但是,调用另一个 subMy::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()

4

1 回答 1

1

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

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

        {
            package My::New::B;
            My::Calc::C();
        }
    } );
于 2013-09-16T19:42:23.177 回答