2013-10-06 4 views
1

나는 하루 종일 답을 찾으려고 노력하고 있지만 아무 것도 찾지 못했습니다. test :: more (test1.t, test2.t, test3.t ...)을 사용하여 몇 가지 테스트를 작성했습니다. 그리고 나는 TAP :: Harness을 사용하여 모든 테스트를 처리하는 기본 펄 스크립트 (main.pl)를 작성하고 formatter_class => 'TAP :: Formatter :: JUnit을 사용하여 JUnit 형식으로 출력을 인쇄합니다. 내 테스트에서는 BAIL_OUT 함수를 사용합니다. 문제는 테스트가 중단되면 주 스크립트도 종료되고 결과가 전혀 출력되지 않는다는 것입니다. 예를 들어 test3.t bailed_out과 같은 경우 test1.t 및 test2.t에 대한 결과를 확인해야합니다. 내가 어떻게 할 수 있니?TAP :: Harness를 사용한 핸들 테스트, 테스트가 끝나면 출력물을 출력하는 방법

다른 테스트를 계속하고 싶지 않기 때문에 BAIL_OUT 대신 exit 또는 die를 사용할 수 없습니다. (test3.t이 BAIL_OUT 인 경우 test4.t가 실행되기를 원하지 않습니다.)

나를 도와 줄 수있는 사람이 있습니까? 구제 아웃 테스트 이전에 실행 중이던 테스트 결과를 확인해야합니다.

감사합니다.

답변

0

Test::More 문서에 따르면

BAIL_OUT ($ 이유)

하네스에 상황이 너무 나 빠지고 모든 테스트가 종료되어야 함을 나타냅니다.
여기에는 추가 테스트 스크립트 실행이 포함됩니다.

그럼 왜 스위트가 중단되는지 설명합니다.

BAIL_OUT의 이유에 따라 die_on_failTest::Most 또는 skip_all으로 설정할 수 있습니다.

편집 : 테스트 것 같은데 ::는 "치명적인 오류"according to the source code에 종료 할 때 빌더는 요약을 인쇄의 어떤 의도를 가지고 있지 않습니다

sub BAIL_OUT { 
    my($self, $reason) = @_; 

    $self->{Bailed_Out} = 1; 
    $self->_print("Bail out! $reason"); 
    exit 255; 
} 

# Don't do an ending if we bailed out. 
if($self->{Bailed_Out}) { 
    $self->is_passing(0); 
    return; 
} 

그러나, Bailed_Out 플래그가 오직 사용된다 요약 진단 출력을 고려해보십시오. Test::More은 기본 Test::Builder 개체를 노출하므로 BAIL_OUT 서브 루틴을 조정할 수 있으며이 플래그를 설정하지 않아도됩니다. 물론 테스트되지 않은 모든 것; YMMV. 대신 하나의 TAP :: 하네스에 모든 테스트에 통과

+0

다른 모든 테스트를 실행할 필요가 없기 때문에 BAIL_OUT이 필요합니다. 죽거나 건너 뛰면 다른 테스트가 계속 실행됩니다. 전체 빌드가 실패하고 테스트를 계속할 이유가 없으므로 테스트가 실패 할 때 BAIL_OUT을 사용합니다. 스위트가 중단되었지만 구제 전에 테스트가 실행 된 결과를 볼 수 있습니까? – user1836185

+0

그리고 관련된 테스트 스위트 만 중단되고, 이전의 모든 테스트 슈트가있는 메인 스크립트도 사라져야하는 이유는 무엇입니까? – user1836185

+0

괜찮은 것 같지만 어떻게 깃발 값을 바꿀 수 있습니까? – user1836185

0

, 그렇게 여기, 당신의 코드를 보지 못했다

BAIL_OUT의 경우에는 하네스에 한 번에 하나 개의 시험에 통과해야 내 말 뜻의 표본. 포맷터와 기타 필요한 것을 포함하도록 조정하십시오.

use TAP::Harness; 

my $harness = TAP::Harness->new({ merge => 0 }); 
my $tests = ['t/test1.t', 't/test2.t']; 

foreach my $test (@$tests) { 
    eval { 
     $harness->runtests([$test]); 
    }; if ([email protected]) { 
     # create new harness object if the previous fails catastrophically. 
     $harness = TAP::Harness->new({ merge => 0 }); 
    } 
} 
관련 문제