加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在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;

  # ..
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读