私は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をするように設定されていますか?
はい、 '私の($セクション、$キー)= @_;'部分が間違っています...問題は、引数スタックからオブジェクトをシフトしても、次の引数はnullです。 –
私は '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インターネット –
' my($ section、$ key)= @_; 'の前に' my $ self = shift; 'を使うようにgetIniVarを修正しました... $ selfの後に最初の引数を失っています。 –