当测试人员在Perl中使用TAP失败时,是否可以测试预期的错误?

gvk*_*vkv 4 testing perl tap

假设您正在运行某些单元测试,并且您想要查看您正在测试的方法(或脚本或函数或其他)是否应该失败.你如何设置这样的测试?我希望这样的事情:

ok( $obj->method($my, $bad, $params) == DEATH, 'method dies as expected');
Run Code Online (Sandbox Code Playgroud)

虽然我没有看到它如何工作,因为method die传递坏参数和测试脚本停止.

还有另外一种方法吗?

dso*_*ano 5

你试过Test :: Exception吗? dies_ok应该做你想做的事.例如:

# Check that something died - we do not care why
dies_ok { $foo->method } 'expecting to die';
Run Code Online (Sandbox Code Playgroud)


cjm*_*cjm 5

我推荐Test :: Fatal而不是Test :: Exception.

Test :: Exception已经存在了很长时间,因此很多现有的测试套件都使用它,但Test :: Fatal更容易学习.测试::致命导出只有1个功能:exception.这将运行关联的代码并返回它抛出的异常,或者undef它是否正常运行.然后,测试使用任何正常的是返回值测试::更多功能,如is,isnt,like,或isa_ok.

测试::例外要求您了解了自己的测试功能,如throws_okdies_ok,记住,你不把代码和测试名之间用逗号.

所以,你的例子是:

use Test::More;
use Test::Fatal;

my $obj = ...;

isnt(exception { $obj->method($my, $bad, $params) },
     undef, 'method dies as expected');
Run Code Online (Sandbox Code Playgroud)

或者您可以使用like匹配预期的错误消息,或isa_ok测试它是否抛出了正确的异常对象类.

Test :: Fatal比Test :: Exception提供更多的灵活性,学习曲线更少.