Как я могу издеваться -f над объектом в Perl? - PullRequest
2 голосов
/ 01 марта 2010

У меня есть объект Perl, который определил use overload '""' => \&name; и метод 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 голосов
/ 02 марта 2010

[Слишком сложный ответ, включающий пропущенные строковые уловки.]

overload сохраняет представление о том, какие перегрузки действуют в волшебном месте. Иногда, особенно с динамически генерируемыми классами, он не замечает изменений. Вы можете заставить его обратить внимание, благословив свежий предмет в классе. Вы можете немедленно отказаться от объекта; Благословение - вот что важно. Вам даже не нужно никуда хранить объект. У меня работает следующее:

use Scalar::Util qw(blessed);

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

print "$o\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...