如何调试单个Perl单元测试子?

时间:2016-12-19 21:36:46

标签: perl unit-testing modulino

我有通常的MakeMaker模块,其中包含t/测试目录,我可以使用例如prove -I lib t/my-test.t运行单个测试文件。

我的测试使用Test::ClassTest::More和subs(使用Effective Perl的modulino技术),如下所示:

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...

现在我想使用Perl调试器来调查一个在我的模块中显示问题的测试子。我想只在调试器中运行test_something,而不运行.t文件中的所有其他测试子。

prove似乎没有这样的选择。

perl -d -I lib t/my-test.t运行所有测试,除非我将modulino更改为调用setup方法,然后调用实际测试方法而不是__PACKAGE__->runtests()

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

如何在不修改代码的情况下只运行一个测试子?

1 个答案:

答案 0 :(得分:8)

为避免运行所有测试,必须在加载测试脚本时定义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()