0
Perl에서 테스트 스크립트를 설정하고 있습니다. Test :: MockObject를 사용하여 일부 구성 데이터를 보유 할 mock 객체를 만듭니다.인수가 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 파일에서 온다 :
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';
'
: 나는 테스트를 실행하면
print STDERR
"\$self->{com}->getIniVar('section', 'key') = '"
. $self->{com}->getIniVar(SECTION_NAME,KEY_NAME)
. "'\n";
, 나는 다음을 참조
라고 mock 객체가
use_ok 'Appriss::ImageExtraction3::Config';
이것은 내가 원하는 모든 인수를 갖고있는 것 같아요,하지만 난 명시 적으로 호출하고 있지 않다, 그래서 무슨 일이 일어나고 있는지 모르는 동안 것을 처음 그곳에. 두번째 이유는 ... I 명시 적으로 (위)
$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를 사용하고 있습니다. suite는 h2xs에 의해 생성되었으므로 blib 디렉토리 트리를 사용하여 테스트 용 임시 환경을 만듭니다. 불행하게도, Test :: Class는 많은 테스트 코드를 평가 안에 포개고 디버거는 평가 된 코드를 트래버스하지 않는다. 't/13-unlucky.t'에 대한 +1/4 internets –
'my ($ section, $ key) = @_;'앞에 {my $ self = shift;}를 사용하도록 getIniVar를 수정했습니다 ... I 여전히 $ self 다음에 첫 번째 인수를 잃어 버렸습니다. –