Perl Carp:confess单元测试

3

我正在尝试编写一个perl单元测试。我已经可以测试正常情况。但是,如果方法中生成错误,则使用Carp:confess "<message>"打印错误信息。我无法在我的测试中捕获这种情况。

我尝试使用

dies_ok( <method call>, 'Expected Error' );

然而测试用例仍然失败。它会打印传递给Carp::confess的消息,然后打印:

Looks like your test exited with 111 before it could output anything. Dubious, test returned 111 (wstat 28416, 0x6f00)

有没有办法可以捕获这个错误?我甚至尝试了throws_ok,但无效。

请指导我如何捕获这些错误。我是否不正确地使用了dies_okthrows_ok


2
你在匿名子程序中调用了该方法吗? - Miller
我没有这样做过,但我尝试了一下,它起作用了。你能解释一下为什么需要一个匿名子程序来封装调用吗?我不太清楚... 另外,你能把解释发在答案里吗,这样我就可以接受它了。 谢谢 :) - alwaysAStudent
1个回答

1

在执行表达式后,您可以检查$@。

use strict;
use warnings;

use Test::More;

use Carp qw(confess);

sub err { confess('Bad thing'); }

eval { err };
like($@, qr/^Bad thing/, "confess('Bad thing')");

done_testing();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接