Question

Je voudrais test unitaire d'un programme Perl de mes qui utilise des accents graves. Est-il un moyen de se moquer des accents graves afin qu'ils feraient quelque chose de différent d'exécuter la commande externe?

Une autre question montre ce que je dois , mais en Ruby. Malheureusement, je ne peux pas choisir d'utiliser Ruby pour ce projet, et je ne veux éviter les accents graves.

Était-ce utile?

La solution

Vous pouvez * maquette intégré readpipe une fonction. Perl appellera votre fonction moquerai quand il rencontre une expression ou des accents graves 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

* - si vous avez Version Perl 5.8.9 ou version ultérieure.

Autres conseils

Au lieu d'utiliser des accents graves, vous pouvez utiliser capture de IPC :: Système: :. simple , puis écrire une version maquette de la capture () dans votre test unitaire

# 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top