参数未正确传递给Test :: MockObject方法

时间:2012-03-12 15:11:33

标签: perl unit-testing

我正在设置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 ...为什么?

1 个答案:

答案 0 :(得分:1)

这一行看起来很可疑:

my ( $section, $key ) = @_;

据我所知,第一个参数应该是模拟对象本身。

至于P.S.,您可以单独运行t / * .t文件:

% perl -Ilib -d t/13-unlucky.t