Wie kann ich Perl-interne Backticks Operator verspotten?
-
01-10-2019 - |
Frage
möchte ich Unit-Test wie ein Perl-Programm von mir, die Backticks verwendet. Gibt es einen Weg, um die Backticks zu verspotten, so dass sie von der Ausführung des externen Befehls etwas anderes tun würden?
Eine andere Frage zeigt, was ich braucht, aber in Ruby. Leider kann ich Rubin nicht wähle für dieses Projekt zu verwenden, noch habe ich die Backticks zu vermeiden.
Lösung
Sie können * Mock die eingebaute in readpipe
Funktion. Perl wird Ihre Mock-Funktion aufrufen, wenn sie ein Backticks oder qx
Ausdruck trifft.
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
* - wenn Sie perl Version 5.8.9 oder höher.
Andere Tipps
Statt Backticks zu verwenden, können Sie capture
von IPC :: System: . Einfache , und dann eine Mock-Version von Capture () in der Unit-Test schreiben
# 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