代码之家  ›  专栏  ›  技术社区  ›  Jonas Wagner

如何模拟Perl的内置backticks操作符?

  •  10
  • Jonas Wagner  · 技术社区  · 15 年前

    我想对我的一个使用backticks的Perl程序进行单元测试。有没有一种方法可以模拟backticks,以便它们执行与执行外部命令不同的操作?

    Another question shows what I need

    2 回复  |  直到 9 年前
        1
  •  19
  •   mob    15 年前

    你可以 模仿内置的 readpipe 功能。当遇到backticks或 qx 表情。

    BEGIN {
      *CORE::GLOBAL::readpipe = \&mock_readpipe
    };
    
    sub mock_readpipe {
      wantarray ? ("foo\n") : "foo\n";
    }
    
    print readpipe("ls -R");
    print `ls -R`;
    print qx(ls -R);
    


    $ perl mock-readpipe.pl
    foo
    foo
    foo
    

    * -如果你有 perl version 5.8.9 或者更晚。

        2
  •  2
  •   Ether    15 年前

    capture IPC::System::Simple

    # application
    use IPC::System::Simple qw(capture);
    my $stuff = capture("some command");
    
    # test script
    {
         package IPC::System::Simple;
         sub capture
         {
             # do something else; perhaps a call to ok()
         }
    }
    
    # ... rest of unit test here