我有一个已定义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";});
我嘲笑的其他方法正在发挥作用。
答案 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";