2016-12-19 2 views
3

테스트 디렉토리가 t/ 인 일반적인 MakeMaker 모듈이 있는데, 예를 들어 prove -I lib t/my-test.t과 같은 테스트 파일 하나를 실행할 수 있습니다.단일 Perl 유닛 테스트 서브를 어떻게 디버깅 할 수 있습니까?

내 테스트는 다음과 같이 (유효 펄에서 modulino 기술로) Test::ClassTest::More 및 서브 우퍼를 사용

use strict; 
use warnings; 
use base 'Test::Class'; 
use Test::More; 

__PACKAGE__->runtests() unless caller; 

sub set_up : Test(setup) { 
    # ... 
} 

sub test_something : Test { 
    is(MyModule::some_sub(1), 1); 
} 

# ...more test subs... 

가 지금은 문제의 표시 테스트 서브를 조사하기 위해 펄 디버거를 사용하려면 내 모듈. .t 파일의 다른 모든 테스트 서브를 실행하지 않고 디버거에만 test_something을 실행하고 싶습니다.

에는 이러한 옵션이없는 것으로 보입니다.

perl -d -I lib t/my-test.t 실행 모든 테스트, 제가 설정 방법 대신 __PACKAGE__->runtests()의 다음 실제 시험 방법 호출 내 modulino 변경하지 않는 : 나는 코드를 수정하지 않고 하나 개의 테스트 서브를 실행할 수있는 방법

unless (caller) { 
    set_up(); 
    test_something(); 
    done_testing(); 
} 

를?

+1

프로그램의 일부만 테스트하거나 스크립트를 실행할 수는 없습니다. – ikegami

+0

@ikegami 내가 원하는 하위를 호출하여 할 수있는 일은 많지만 테스트를 수정하지 않고 할 수있는 방법을 찾고 있습니다. – Robert

+1

프로그램에서 모든 테스트를 실행하며 프로그램의 일부만 실행할 수는 없습니다. – ikegami

답변

7

모든 테스트를 실행하지 않으려면 테스트 스크립트가로드 될 때 caller을 정의해야합니다. 다음과 같이 시도하십시오.

$ perl -Ilib -de 1 
DB<1> do 't/my-test.t' 
DB<2> set_up() 
DB<3> b test_something_else 
DB<4> test_something_else() 
    ... step through test_something_else() function ... 
DB<16> done_testing()