【发布时间】:2009-02-24 04:07:45
【问题描述】:
根据 Test::More documentation,它会根据您的测试结果以某些退出代码退出。 我的问题是,如何检查这些退出代码?
ps。我正在尝试自己建立一个安全带。有没有我可以使用的简单安全带?
ps2。 Test::Harness 帮了我大忙。特别是 execute_tests 函数。此函数返回我想要的所有统计信息。感谢所有提供有用链接的人。
【问题讨论】:
根据 Test::More documentation,它会根据您的测试结果以某些退出代码退出。 我的问题是,如何检查这些退出代码?
ps。我正在尝试自己建立一个安全带。有没有我可以使用的简单安全带?
ps2。 Test::Harness 帮了我大忙。特别是 execute_tests 函数。此函数返回我想要的所有统计信息。感谢所有提供有用链接的人。
【问题讨论】:
任何体面的安全带程序(例如prove)都会为您做到这一点,您绝对没有理由自己这样做。
【讨论】:
这是一个进程返回码。如果在某些 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."
【讨论】:
如果您从 Perl 调用您的测试程序,那么困难的(和传统的)方法涉及对$? 进行黑暗和可怕的位移。如果您真的想了解如何操作,可以在 system function documentation 中阅读相关内容。
不错的方法涉及使用一个模块,该模块为您提供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 文档。
还有其他模块可以让您轻松运行命令并捕获其退出值。蒂姆托迪。
话虽如此,所有好的工具都应该为您检查返回值,因此只有在您编写我们自己的测试测试器时,您才需要自己查看。
一切顺利,
保罗
披露:我编写了 IPC::System::Simple,因此可能对它有一些积极的偏见。
【讨论】: