Une bibliothèque Perl externe que j'utilise a une dépendance (DBD :: mysql) que je n'utiliserai pas dans mon application (DBD :: SQLite), donc je voudrais que le système prétende simplement que la dépendance est là, même si c'est un "faux". Puis-je simplement créer un module DBD :: mysql.pm vide qui compile ou existe-t-il un moyen plus simple de le faire?comment simuler un module perl pour une dépendance?
Répondre
Donc, je pense qu'il y a quelques problèmes ici.
Lorsque vous parlez de dépendance, voulez-vous dire que le module externe essaie simplement de require
ou de use
DBD::mysql
? Si tel est le cas, vous devriez aviser le développeur qu'il ne devrait pas le faire explicitement parce que cela va à l'encontre du but de DBI
. Le pilote de base de données doit être sélectionné à la volée basé sur le DSN.
Si l'on suppose que l'auteur est simplement use
ing le nom du paquet parce qu'il pensait que c'était une chose utile ou utile à faire, puis oui, vous pouvez remplacer ce paquet, et il y a quelques façons de le faire.
Comme vous l'avez suggéré, vous pouvez simplement créer votre propre module DBD/mysql.pm
qui définirait le package DBD::mysql
.
Il y a d'autres choses que vous pourriez faire si vous êtes intéressé. Au lieu de joncher votre arborescence source de faux répertoires et fichiers, vous devez simplement convaincre Perl que le module a été chargé. Nous pouvons le faire en manipulant directement %INC
. Simplement en ajoutant cette clé de hachage, nous empêchons la recherche du système de fichiers pour le module incriminé. Observez que c'est dans un bloc. Si l'auteur externe a fait un use
, nous devons remplir cette valeur avant que l'instruction use
ne soit évaluée. Les instructions use
sont équivalentes à require
et import
enveloppées dans un BEGIN
.
Maintenant spécule plus loin dans le sens général que l'auteur externe essayait d'appeler des méthodes du paquet. Vous obtiendrez des erreurs d'exécution si ces symboles n'existent pas. Vous pouvez profiter des AUTOLOAD
de Perl pour intercepter de tels appels et faire le bon choix. Qu'est-ce La bonne chose peut varier beaucoup, de la simple connexion d'un message à quelque chose de plus élaboré. Par exemple, vous pouvez utiliser cette fonction pour examiner la profondeur du couplage que l'auteur a introduit en surveillant tous les appels.
package DBD::mysql;
sub AUTOLOAD {
printf(
"I don't wanna '%s' called from '%s'\n", $AUTOLOAD, caller(0)
);
}
package main; # or whereever
BEGIN {
$INC{'DBD/mysql.pm'} = "nothing to see here";
}
DBD::mysql::blah()
Maintenant, nous allons couvrir également le cas où l'auteur incriminé a également créé certains cas orientés objet d'une classe, et son code ne compte pas correctement pour votre code stub. Nous reprendrons le constructeur que nous supposons être new
pour bénir un hash anonyme avec notre nom de paquet. De cette façon, vous n'obtiendrez pas d'erreurs lorsqu'il appelle des méthodes sur une instance.
package DBD::mysql;
sub AUTOLOAD {
printf(
"I don't wanna '%s' called from '%s'\n", $AUTOLOAD, caller(0)
);
}
sub new {
bless({}, __PACKAGE__)
}
package main; # or whereever
BEGIN {
$INC{'DBD/mysql.pm'} = "nothing to see here";
}
my $thing = new DBD::mysql;
$thing->blah()
- 1. Comment simuler non implémenté Injection de dépendance?
- 2. Comment utiliser un module Perl?
- 3. Comment organiser correctement un arbre de dépendance de module/module?
- 4. Comment promouvoir une dépendance groupée vers un module global?
- 5. Migrer un module perl
- 6. construire un module perl
- 7. Un module pour générer une table automatiquement en perl
- 8. Comment écrire une référence de fonction dans un module Perl?
- 9. Comment installer un module? Questions Strawberry Perl
- 10. Comment utiliser une dépendance d'un module dans une application Play
- 11. dépendance entre modules perl
- 12. Simuler manque d'une dépendance lors du test d'un script python
- 13. Comment puis-je simuler -f sur un objet en Perl?
- 14. Utilisation de simulacre pour simuler un module importé pour tester une fonction de contrôleur Pylons
- 15. Dépendance DLL et module HTTP
- 16. dépendance printemps maven module plusieurs
- 17. OO: Doc -perl module pour Openoffic
- 18. Comment supprimer la dépendance: modules de sous-maven crée une dépendance implicite sur le module parent
- 19. paralle :: forkmanager module perl
- 20. module Perl GetOptions
- 21. Module Perl pour permettre les options 'make'
- 22. Module perl pour détecter l'URL étrangère
- 23. Quel module Perl utiliser?
- 24. Importer module Perl dans un autre répertoire
- 25. Perl Installation du module
- 26. Perl WWW-Mechanize Module
- 27. Téléchargement de toutes les dépendances pour un module Perl
- 28. Module d'authentification Perl
- 29. module perl pour l'écriture du classeur excel2007
- 30. Comment inclure un module Perl dans un répertoire différent?