Comment puis-je me moque opérateur intégré accents graves dans Perl?
-
01-10-2019 - |
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.
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