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 external command?
Another question shows what I need, but in Ruby. Unfortunately, I cannot choose to use Ruby for this project, nor do I want to avoid the backticks.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With