在Perl中测试SUPER ::方法的分支分配
发布时间:2020-12-16 06:19:45 所属栏目:大数据 来源:网络整理
导读:我即将完成研究 Intermediate Perl书. 在第18章中,Object Destruction引入了以下DESTROY方法定义: # lib/Animal.pmpackage Animal { # ... sub DESTROY { my $self = shift; if ($self-{temp_filename}){ my $fh = $self-{temp_fh}; close $fh; unlink $sel
我即将完成研究
Intermediate Perl书.
在第18章中,Object Destruction引入了以下DESTROY方法定义: # lib/Animal.pm package Animal { # ... sub DESTROY { my $self = shift; if ($self->{temp_filename}){ my $fh = $self->{temp_fh}; close $fh; unlink $self->{temp_filename}; } print '[',$self->name," has died.]n"; } # ... } # lib/Horse.pm package Horse { use parent qw(Animal) # ... sub DESTROY { my $self = shift; $self->SUPER::DESTROY if $self->can( 'SUPER::DESTROY' ); print "["," has gone off to the glue factory.]n"; } # ... } 在尝试了几次失败之后,我根据this answer编写了这个测试: # t/Horse.t #!perl -T use strict; use warnings; use Test::More tests => 6; use Test::Output; # some other tests # test DESTROY() when SUPER::DESTROY is not defined; { my $tv_horse = Horse->named('Mr. Ed'); stdout_is( sub { $tv_horse->DESTROY },"[Mr. Ed has died.]n[Mr. Ed has gone off to the glue factory.]n",'Horse DESTROY() when SUPER::DESTROY is defined'); } { my $tv_horse = Horse->named('Mr. Ed'); sub Animal::DESTROY { undef } stdout_is( sub { $tv_horse->DESTROY },"[Mr. Ed has gone off to the glue factory.]n",'Horse DESTROY() when SUPER::DESTROY is not defined'); } 我无法正确测试两种情况下的输出,因为方法重新定义子Animal :: DESTROY {undef}也影响前一个块中的测试. 您知道如何确保方法重新定义按预期工作吗? 谢谢 解决方法
这应该只设置删除/重新定义的子程序,直到封闭块结束,
{ # not needed when removing method # no warnings 'redefine'; my $tv_horse = Horse->named('Mr. Ed'); # returns undef # local *Animal::DESTROY = sub { undef }; # remove the mothod until end of the enclosing block local *Animal::DESTROY; # .. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |