我为函数foo
编写了一些测试用例。
有些测试用例失败,为了调试并找到问题,我希望在函数foo
中打印一些调试消息。
我的尝试是:
Test::More
不希望我修改标准输出。make test
我了解了diag
note
和explain
,我在diag('test')
内做了foo
但是没有打印消息。它们的示例表明它们将在测试用例函数中使用。
当我为它运行测试用例时,我真的想在我的foo
中打印一条消息!
那么实现这一目标的最正确方法是什么?
答案 0 :(得分:1)
package My::Module;
sub some_func {
...
Test::More::diag(...) if defined(&Test::More::diag);
...
}
...
我更喜欢创建一种机制来将数据传递给调用者。我曾经使用调试钩子来实现类似的东西。
{
my $diag;
local $My::Module::DEBUG_HOOK = sub {
my (...) = @_;
$diag = ...;
};
is(My::Module::some_func(...), ..., ...)
or diag($diag);
}
该模块看起来像:
package My::Module;
our $DEBUG_HOOK;
sub some_func {
...
$DEBUG_HOOK->(...) if $DEBUG_HOOK;
...
}
...
奖励:您知道可以选择仅输出有关错误的诊断信息,或者根据测试是否成功在note
和diag
之间切换。
答案 1 :(得分:1)
感谢大家的关注。
我终于明白了......
在我的功能中
sub foo {
diag('hahahah');
}
在我的测试中:
ok(Package::foo());
当我跑perl Makefile.PL; make test
我阅读了Test :: More的perldoc并注意到diag / note的示例用法来自测试文件,而不是来自测试函数,这让我有点困惑:我认为diag / note只能用于测试用例,而不是测试功能。
那为什么'hahahah'首先没有打印出来?
原因是......我在use Test::More;
的包裹中没有foo
。把线放到那里后,我可以在输出中看到'hahahah'。
我没有收到关于diag not found
的警告。
答案 2 :(得分:0)
尝试写入文件:
open my $fh, '>>', '/tmp/test.log';
print $fh "my awesdome message\n";
close $fh;
但是,如果在stderr
上没有看到输出,则可能无法执行您的功能答案 3 :(得分:0)
我正在使用: $ make test TEST_VERBOSE = 1