2011-10-05 4 views
2

IO :: Socket :: INET을 사용하는 Perl 모듈에 대한 단위 테스트를 작성 중이므로 IO를 조롱하고 싶습니다. : 소켓 : :: Test :: MockObject를 사용하는 INET 모듈.IO :: Socket :: INET을 Test :: MockObject로 조롱하는 법

SP는 지금까지 내가

$INC{'IO/Socket/INET.pm'} = 1; 
my $inet = Test::MockObject->new(); 
$inet->fake_module('IO::Socket::INET', new => sub { $inet }); 

같은하지만 테스트 해요 모듈의 코드를

my $server = IO::Socket::INET->new(...); 
my $data = <$server> 

과 같은 코드를 가지고 있는데이 테스트를 실행할 때 나는 "와 같은 오류를하지 얻을 각도 연산자 "를 실행하려고 할 때"GLOB 참조 "가됩니다.

모의 개체 참조를 파일 핸들처럼 보이게하려면이 코드를 실행하려면 무엇을 추가해야합니까?

답변

0

overload을 사용하여 <> 연산자를 자체적으로 구현하는 자신의 mock INET 클래스를 만들 수 있습니다. 다음과 같은 뭔가 :

package My::MockINET; 

use strict; 
use warnings; 

use overload '<>' => \&_readline; 

sub new { 
    return bless { }, shift; 
} 

sub _readline { 
    return "some data here\n"; 
} 

1; 

그런 다음 당신은 그것을 좋아 사용할 수 있습니다

$INC{'IO/Socket/INET.pm'} = 1; 
my $inet = My::MockINET->new(); 

my $data = <$inet>; 
+0

덕분에, 지금은 테스트 :: 모의 객체와 함께 할 수있는 방법을 발견했습니다. MockObject 생성자에 전역 참조를 전달할 수 있으므로 open (FH, "<", \ $ scalar)을 사용하여 파일 핸들을 만든 다음 \\ * FH를 MockObject-> new()에 전달합니다. 조롱 된 객체는 파일 핸들처럼 동작합니다. –

관련 문제