如何在Perl中的对象上模拟-f?

时间:2010-03-01 15:25:19

标签: perl unit-testing mocking

我有一个已定义use overload '""' => \&name;的Perl对象 和name方法。

在我的单元测试中,我模拟了这个对象,包括name方法,但代码如

if (-d $object)

仍然给了我Use of uninitialized value in -d ...。模拟的方法没有被执行。

我的模拟代码:

my $CMmock = Test::MockObject::Extends->new('MyClass');
$CMmock->mock('name', sub { print "TEST!\n";});      
$CMmock->mock('""', sub {print "TEST!\n";});

我嘲笑的其他方法正在发挥作用。

1 个答案:

答案 0 :(得分:0)

[过于复杂的回答涉及字符串遗言被删除。]

overload可以了解在神奇的地方有效的重载。有时,特别是对于动态生成的类,它没有注意到更改。你可以通过祝福一个新的对象进入课堂来强迫它注意。你可以立即丢弃这个对象;祝福事件才是最重要的。您甚至不必将对象存储在任何地方。以下适用于我:

use Scalar::Util qw(blessed);

my $o = Test::MockObject::Extends->new('MyClass')
        ->mock(name => sub { "Bah!" })
;
bless {} => blessed $o;

print "$o\n";