2014-05-22 4 views
1

print 함수 출력을 모듈에서 prove 테스트 출력으로 캡처하는 방법은 무엇입니까? 예를 들어 :캡처에서 Perl 모듈의 표준 출력

A.pm

package A; 

sub f { 
    print "inside module A"; 
} 

a.t

use Test::More; 

ok(f(), "test f() side effects"); 

어쩌면 조금 부적절 예,하지만 아이디어는 test amodule A에서 인쇄 출력을 리디렉션하는 것입니다, 나는 prove을하지 사용하고 가정 perl 테스트를 실행하려면이 작업을 수행 할 수 있습니까?

+0

http://stackoverflow.com/a/3508679/223226 –

답변

1

테스트 중에 일시적으로 출력을 리디렉션합니다.

open $handle, '>', \$var 

이 출력 핸들을 엽니 다

my $scalar; 
open my $test_fh, '>', \$scalar; 
my $old_fh = select($test_fh); # $old_fh is probably STDOUT 
f(); 
select($old_fh); 
close $test_fh; 
ok($scalar eq 'inside module A', 'test f() side effects'); 

이 코드는 몇 덜 일반적인 기능 및 관용구를 사용합니다. 그 핸들 출력은 스칼라 변수 $var

$old_handle = select($new_handle) 

"기본"파일 핸들을 설정에 파일 핸들 인수가 제공되지 않는 경우 printprintf 기능에 의해 사용되는 저장됩니다. 보통 기본 파일 핸들은 STDOUT입니다. 반환 값은 기존의 기본 파일 핸들입니다.