有没有办法使用标准的Test等模块自动测试Perl程序是否正在读取输入。 STDIN正常吗?例如。测试从STDIN读取两个整数的程序并打印它们的总和。
答案 0 :(得分:5)
我不是100%清楚你的意思,我会假设你想要编写一个测试你的主程序的测试脚本,作为测试的一部分需要通过STDIN传递测试输入数据。
如果您的程序输出它所读取的内容,您可以轻松地执行此操作。您不需要特殊的测试模块 - 只需:
通过系统调用将您的程序调用为
使用
将测试程序的STDIN和STDOUT重定向到您的测试脚本 IPC::Open2
模块通过管道向文件句柄打开双方,
...或者,构建您的命令以重定向到/从文件中读取/写入测试脚本中的文件
检查您在最后一步中收集的测试程序的STDOUT,以确保打印正确的值。
答案 1 :(得分: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