J'ajoute actuellement des tests unitaires à un code existant et je me retrouve avec la nécessité de surcharger une fonction ouverte. Le code live ressemble à ceci.Comment puis-je remplacer la fonction open() de Perl mais utiliser le même handle de fichier pour le test?
if (!open(F, $filetoopen)){
# do stuff with <F>
}
Ce que je veux faire est de faire en sorte que « F » contient un descripteur de fichier que j'ai fourni de mes tests plutôt que ce qu'il pense son ouverture.
J'ai le code suivant dans mon fichier .T ...
BEGIN {
*CORE::GLOBAL::open = sub { open(F,$testfiletoopen); };
};
... il fonctionne et le code dans le test se termine en lisant de mon dossier de test. Cependant, il ne continuera à fonctionner que si j'utilise le même nom de fichier "F" que le code en test.
S'il existe un moyen de rendre ce code de test moins fragile de sorte que si le nom du handle de fichier est modifié dans le code live, le test n'échouera pas?
Merci
Merci c'est presque ce dont j'ai besoin sub {open (@_ [0], $ newfilename)}; fonctionne – Vagnerr
Ah! Maintenant je comprends. Je vais modifier ma réponse en conséquence. – innaM
D'accord, vous devriez utiliser la forme à trois arguments de open, et utiliser les handles de fichiers lexicaux: ... sub {open $ _ [0], $ _ [1], $ newfilename} – Ether