2012-03-12 5 views
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를 인수로 설정?

답변

1

이 줄은 의심스러운 :

내가 알고있는 것처럼
my ($section, $key) = @_; 

는 첫 번째 인수는 모의 객체 자체이어야한다.

이 P.S.에 관해서는, 당신은 */t를 실행할 수 있습니다 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를 사용하고 있습니다. suite는 h2xs에 의해 생성되었으므로 blib 디렉토리 트리를 사용하여 테스트 용 임시 환경을 만듭니다. 불행하게도, Test :: Class는 많은 테스트 코드를 평가 안에 포개고 디버거는 평가 된 코드를 트래버스하지 않는다. 't/13-unlucky.t'에 대한 +1/4 internets –

+0

'my ($ section, $ key) = @_;'앞에 {my $ self = shift;}를 사용하도록 getIniVar를 수정했습니다 ... I 여전히 $ self 다음에 첫 번째 인수를 잃어 버렸습니다. –

관련 문제