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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top