如何在Perl单元测试中验证外部命令的输出?

时间:2015-06-12 06:28:38

标签: perl unit-testing

我正在为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). 

我知道如何捕获外部程序的输出。

如何在一个变量中获得整个预期输出,并将该变量与捕获输出的变量进行比较?

1 个答案:

答案 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;

请注意,这可能不是最好的测试。也许您应该只检查所有参数是否都有一些描述,但不是真正关心那是什么,因为更改文档(以及用法是面向用户的文档)几乎不会破坏功能。