【问题标题】:Perl: Testing an input reader?Perl:测试输入阅读器?
【发布时间】:2013-06-30 05:30:50
【问题描述】:

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

【问题讨论】:

  • use Data::Dumper; print Dumper <STDIN>?
  • 首先,将 STDIN 重定向到一个文件,甚至是测试脚本中的一个 DATA 段。其次,验证您的读取是否产生了预期值。
  • 谢谢,这正是我想做的!刚刚看到这个,但我最终设法自己解决了这个问题:让测试打开一个带有测试输入作为 STDIN 的文件;这样,输入会自动通过管道传输到正在测试的程序中,就好像它们来自命令行一样。

标签: perl module stdin cpan


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    如果要测试 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

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2015-05-23
      • 2015-08-16
      • 1970-01-01
      • 2014-03-21
      • 2014-03-10
      相关资源
      最近更新 更多