Domanda

Mi piacerebbe unit test un programma Perl di mine che utilizza backticks. C'è un modo per prendere in giro i backticks in modo che avrebbero fatto qualcosa di diverso dalla esecuzione del comando esterno?

Un altro mostra interrogativi che mi servono , ma in Ruby. Purtroppo, non posso scegliere di utilizzare Rubino per questo progetto, né voglio evitare le backticks.

È stato utile?

Soluzione

Puoi * finta il built-in readpipe funzione. Perl chiamerà la funzione finta quando incontra un'espressione backticks o 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

* - se si dispone di perl versione 5.8.9 o successiva.

Altri suggerimenti

Invece di usare apici inversi, è possibile utilizzare capture da IPC :: Sistema: :. semplice , e poi scrivere una versione finta di cattura () nella tua 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top