我正在为Perl中的外部程序编写自动化测试。我想在我的测试中验证其--help
命令的输出。
命令的输出如下:
Usage: dskrb [options]
--help Help
--list List all tickets
--reset Clear all tickets
--debug <arg> Debug
--client <arg> Client principal, user@realm
--password <arg> Client password
--client-kdc <arg> Use this KDC in client realm.
--cd-client <arg> Client principal for Constrained Delegation, user@realm.
--cd-password <arg> Password for cd-client
--server <arg> Server principal, e.g. HTTP/target-server.abc.com[@realm]
--server-kdc <arg> Unse this server realm KDC
--site <arg> Site of client realm
--login <arg> Login Name
--login-realm <arg> Login Realm (must be provided with login)
--probe <arg> Look up Kerberos KDCs
--overwrite <arg> Overwrite precedence of auth methods (NTLMv1, NTLM).
我知道如何捕获外部程序的输出。
如何在一个变量中获得整个预期输出,并将该变量与捕获输出的变量进行比较?
答案 0 :(得分:1)
您可以使用Test :: More执行此操作,例如使用here-doc。
use Test::More;
my $expected = <<'EXPECTED';
Usage: dskrb [options]
--help Help
--list List all tickets
--reset Clear all tickets
--debug <arg> Debug
--client <arg> Client principal, user@realm
--password <arg> Client password
--client-kdc <arg> Use this KDC in client realm.
--cd-client <arg> Client principal for Constrained Delegation, user@realm.
--cd-password <arg> Password for cd-client
--server <arg> Server principal, e.g. HTTP/target-server.abc.com[@realm]
--server-kdc <arg> Unse this server realm KDC
--site <arg> Site of client realm
--login <arg> Login Name
--login-realm <arg> Login Realm (must be provided with login)
--probe <arg> Look up Kerberos KDCs
--overwrite <arg> Overwrite precedence of auth methods (NTLMv1, NTLM).
EXPECTED
is `dskrb --help`, $expected, 'usage is displayed';
done_testing;
请注意,这可能不是最好的测试。也许您应该只检查所有参数是否都有一些描述,但不是真正关心那是什么,因为更改文档(以及用法是面向用户的文档)几乎不会破坏功能。