2
: 내가 가진이 (펄)에 '출구'가 서브 루틴을 테스트하는 방법 예를 들어
package Dummy::Mod;
use warnings;
use strict;
sub print_and_exit {
print "Hello World\n";
exit;
}
1;
그런
use warnings;
use strict;
use Test::More;
use Test::Output;
plan tests => 2;
ok(require('dummy_mod.pl'), 'load test') or exit;
stdout_is(sub { Dummy::Mod->print_and_exit() }, "Hello World\n", "stdout test");
dummy_mod.t
dummy_mod.pl :
$ perl dummy_mod.t
1..2
ok 1 - load test
# Looks like you planned 2 tests but ran 1.
테스트 스크립트가 종료되는 것 같습니다. 시험 # 2가 끝나기 전에. 'exit'을 print_and_exit 서브 루틴에서 제거하면 작동하지만 실제로 실행하고 싶지는 않습니다. 나는 다음과 같이 시도했다 :
stdout_is(sub { local $SIG{INT} = sub {}; Dummy::Mod->print_and_exit() }, "Hello World\n", "stdout test");
그것은 작동하지 않는다.
편집 : 주 목적은 해당 서브 루틴의 출력을 테스트하는 것입니다. 실제로는이 서브 루틴의 종료 코드는별로 신경 쓰지 않습니다.
감사합니다. 작동합니다 : is ($ trap-> stdout, "Hello World \ n", 'stdout test'); – vts