2012-03-12 12 views
0

私はPerlでテストスクリプトを設定しています。私はいくつかの構成データを保持する模擬オブジェクトを作成するためにTest :: MockObjectを使用しています。引数がTest :: MockObjectメソッドに正しく渡されない

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; 

その後、私は実際に嘲笑の関数を呼び出します。このように、私は次のように設定してきたように、それは形式

[SECTION] 
KEY = VALUE 

を持っている。すなわち、ライブプログラムの設定は、INIファイルから来ています:

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

この行は、不審になります

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

私は理解しているように、最初の引数は、モックオブジェクト自体でなければなりません。

がP.S.として、あなたは* /トンを実行することができますtは、個別ファイル:。

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

はい、 '私の($セクション、$キー)= @_;'部分が間違っています...問題は、引数スタックからオブジェクトをシフトしても、次の引数はnullです。 –

+0

私は 'perl -d -I blib/lib -I t/lib t/config/config.pm'を使用して終了しました...私はt ::/libでスタックしたTest :: Classを使用しています。スイートはh2xsによって生成されたので、blibディレクトリツリーを使用してテスト用の一時的な環境を作成します。残念なことに、Test :: Classは多くのテストコードを評価の中にラップし、デバッガは評価されたコードをトラバースしません。 't/13-unlucky.t'の+1/4インターネット –

+0

' my($ section、$ key)= @_; 'の前に' my $ self = shift; 'を使うようにgetIniVarを修正しました... $ selfの後に最初の引数を失っています。 –

関連する問題