3

有没有办法使用标准测试等模块自动测试 Perl 程序是否正确地从例如 STDIN 读取输入?例如,测试一个从 STDIN 读取两个整数并打印它们的总和的程序。

4

2 回答 2

5

这不是 100% 清楚你的意思,我会回答假设你想编写一个测试你的主程序的测试脚本,作为测试的一部分,它需要通过 STDIN 传递测试输入数据。

如果您的程序输出它读取的内容,您可以轻松地做到这一点。您不需要特殊的测试模块 - 只需:

  1. 通过系统调用调用您正在测试的程序

    • 将测试程序的 STDIN 和 STDOUT 重定向到您的测试脚本,使用

      • IPC::Open2模块通过管道打开双方文件句柄,

      • ...或者,构建您的命令以重定向到文件/从文件重定向并在测试脚本中读取/写入文件

  2. 检查您在上一步中收集的测试程序中的 STDOUT,以确保打印正确的值。

于 2013-07-02T18:03:38.353 回答
0

如果要测试 STDIN 是否连接到终端,请使用-t,如下所示:

if( -t STDIN ){
    print "Input from a terminal\n";
}else{
    print "Input from a file or pipe\n";
}

请参阅http://perldoc.perl.org/perlfunc.html#Alphabetical-Listing-of-Perl-Functions

于 2013-07-02T19:27:01.600 回答