How do I mock Perl's built-in backticks operator?

后端 未结 2 1941
再見小時候
再見小時候 2021-01-02 02:26

I\'d like to unit test a Perl program of mine that is using backticks. Is there a way to mock the backticks so that they would do something different from executing the exte

相关标签:
2条回答
  • 2021-01-02 02:55

    Instead of using backticks, you can use capture from IPC::System::Simple, and then write a mock version of capture() in your unit test.

    # 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
    
    0 讨论(0)
  • 2021-01-02 02:56

    You can* mock the built-in readpipe function. Perl will call your mock function when it encounters a backticks or qx expression.

    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
    

    * - if you have perl version 5.8.9 or later.

    0 讨论(0)
提交回复
热议问题