Аргументы не передаются правильно в метод Test :: MockObject - PullRequest
0 голосов
/ 12 марта 2012

Я работаю над настройкой тестового скрипта на 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 Ответ

1 голос
/ 12 марта 2012

Эта строка выглядит подозрительно:

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

Как я понимаю, первым аргументом должен быть сам фиктивный объект.

Что касается P.S., вы можете запускать файлы t / *. T индивидуально:

% perl -Ilib -d t/13-unlucky.t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...