我正在修复一个大型测试脚本(> 1000行),它使用一些实用工具方法(也包括> 1000行)来对各种初始数据设置执行重复测试.这有助于整合代码.但是,当测试失败时,它会报告实用程序方法内部的行号,这使得很难跟踪哪个测试失败.
当测试失败时,是否可以将Test::Most
配置为提供堆栈跟踪而不是仅提供单个行号?
#!/usr/bin/env perl use strict; use warnings; use autodie; use Test::Most tests => 3; ok(1,'first test'); note "The following includes a Failed test,but a stack trace would be more helpful"; helper_sub_with_test(); # Line 13 ok(1,'third test'); sub helper_sub_with_test { ok(0,"second test"); # Line 17 }
输出:
$perl scratch.pl 1..3 ok 1 - first test # The following includes a Failed test,but a stack trace would be more helpful not ok 2 - second test # Failed test 'second test' # at scratch.pl line 17. ok 3 - third test # Looks like you Failed 1 test of 3.
解决方法
我不相信Test :: More基础设施提供了这样的野兽,但你真的需要堆栈跟踪吗?只要您为测试提供描述性名称,单独报告第13行就足够了.
要报告第13行而不是第17行,只需将以下内容添加到您的子网:
local $Test::Builder::Level = $Test::Builder::Level + 1;
更长的例子:
#!/usr/bin/env perl use strict; use warnings; use autodie; use Test::Most tests => 3; ok(1,'third test'); sub helper_sub_with_test { local $Test::Builder::Level = $Test::Builder::Level + 1; ok(0,sprintf "second test (look at line %d)",__LINE__); # Line 18 }