我正在设置Perl中的测试脚本。我正在使用Test :: MockObject创建一个模拟对象,它将保存一些配置数据。实时程序中的配置来自INI文件,即格式为
[SECTION]
KEY = VALUE
因此,我设置了以下内容:
use Test::MockObject;
use Data::Dumper qw(Dumper);
use constant SECTION_NAME => 'section';
use constant KEY_NAME => 'key';
use constant VALUE_NAME => 'value';
my $com_mock = Test::MockObject->new();
$com_mock->mock( 'getIniVar', sub {
my $self = shift;
my ( $section, $key ) = @_;
print STDERR "\$_[0] = '" . Dumper( $_[0] ) ." '\n";
print STDERR "\$_[1] = '" . Dumper( $_[1] ) ." '\n";
my %iniVar = ( SECTION_NAME => { KEY_NAME => VALUE_NAME } );
return( $iniVar{$section}->{$key} );
} );
$self->{com} = $com_mock;
后来,我实际上调用了模拟函数:
print STDERR
"\$self->{com}->getIniVar( 'section', 'key') = '"
. $self->{com}->getIniVar( SECTION_NAME,KEY_NAME )
. "'\n";
当我运行测试时,我看到以下内容:
ok 1 - use Appriss::ImageExtraction3::Config;
$_[0] = '$VAR1 = 'section';
'
$_[1] = '$VAR1 = 'key';
'
Use of uninitialized value in concatenation (.) or string at t/config/config.pm line 159.
$self->{com}->getIniVar( 'section', 'key') = ''
$_[0] = '$VAR1 = undef;
'
$_[1] = '$VAR1 = 'key';
'
第一次调用模拟对象是在
期间use_ok 'Appriss::ImageExtraction3::Config';
这似乎有我想要的所有论据,但我没有明确地称之为,所以我不知道那里发生了什么。第二次是我使用
明确调用它$self->{com}->getIniVar( SECTION_NAME,KEY_NAME )
(如上所示)......此时,第一个参数设置为undef ...为什么?
答案 0 :(得分:1)
这一行看起来很可疑:
my ( $section, $key ) = @_;
据我所知,第一个参数应该是模拟对象本身。
至于P.S.,您可以单独运行t / * .t文件:
% perl -Ilib -d t/13-unlucky.t