如何检查Test :: More中的退出代码?

时间:2009-01-15 18:01:09

标签: perl testing

根据Test :: More documentation,它将退出某些退出代码,具体取决于您的测试结果。 我的问题是,如何查看这些退出代码?

PS。我正试图自己建造一个安全带。我可以使用简单的线束吗?

PS2。 Test :: Harness为我做了诀窍。特别是execute_tests函数。此函数返回我想要的所有统计信息。谢谢所有提供有用链接的人。

3 个答案:

答案 0 :(得分:7)

任何体面的线束程序(例如prove)都会为你做到这一点,你绝对没有理由自己这样做。

答案 1 :(得分:4)

这是一个流程返回代码。如果在某些Unix变体的shell下运行,通常可以将其检索为$?。 (这可能使你的问题更多关于bash而不是perl)

常用习语:

perl your_file.t
if [[ $? -gt 10 ]]; then
  echo "Wow, that's a lot of failures"
elif [[ $? -gt 0 ]]; then
  echo "Tests failed"
else
  echo "Success!"
fi

或者,如果您只对成功/失败感兴趣:

perl your_file.t || echo "Something bad happened."

答案 2 :(得分:2)

如果你从Perl调用你的测试程序,那么艰难(和传统)方式涉及到$?的黑暗和可怕的位移。如果您真的想看看如何做,可以在system function documentation中了解相关内容。

nice 方式涉及使用一个模块,该模块为您提供一个system样式函数,为您处理返回值:

use IPC::System::Simple qw(systemx EXIT_ANY);

my $exit_value = systemx( EXIT_ANY, 'mytest.t' );

EXIT_ANY符号允许您的脚本返回任何退出值,然后我们可以捕获该值。如果你只想确保脚本正在传递(即返回零退出状态),并在任何失败时立即停止,那就是IPC::System::Simple的默认行为:

use IPC::System::Simple qw(systemx);

systemx( 'mytest.t' );  # Run this command successfully or die.

在上面的所有示例中,如果您对shell的可能性感到高兴,可以请求替换system命令而不是systemx。有关详细信息,请参阅IPC::System::Simple文档。

还有其他模块可以让您轻松运行命令并捕获其退出值。 TIMTOWTDI。

话虽如此,所有好的安全带都应该为你检查返回值,所以只有你自己编写测试测试人员时才需要自己查看。

一切顺利,

披露:我写过IPC :: System :: Simple,因此可能会有一些积极的偏见。