J'ai un problème sur lequel je rame depuis une semaine avec simpletest ou phpunit ou tout autre framework de test php je suis ouvert...
j'ai dans certaines classes des fonctions qui instancie et utilise d'autre classe.
Exemple
(Le code sans interret pour l'exemple est supprimé)
function getMETA($Meta=null) {
…
// Chargement des données du template associé au Composant
$dl =& Data_Loader::getInstance();
$Data = $dl->load("meta_t_${Meta}");
// Retour null si erreur dans le fichier data
if (!$Data) return(null);
$METAvalue[] = …… traitement sur les differentes conditions pour obtenir les données
// Filtre les valeurs null ou vide, sépare les diferentes parties avec " - " et converti en chaine
$METAvalue=implode(" - ",array_filter($METAvalue));
return($METAvalue);
}
Mon problème est : Comment faire pour tester cette fonction dans un cadre de test unitaire.
En clair, comment simuler la classe Data_Loader afin de maitriser les données qu'elle fourni dans le cadre de la fonction de testGetMeta() et pouvoir faire l'ensemble des tests.
J'ai bien essayer les mock, les stub et autre fantaisies mais sans succes. Il faut au final toujours que je fournisse une instance du mock/stub a la classe a tester, hors dans ce cas la, la fonction getMeta ne le permet pas car elle instancie elle meme.
La seule solution que j'ai trouvé est de redefinir dans le meme fichier de test une pseudo classe Data_Loader mais cela ne me semble pas très propre et ne me permet pas d'ajuster les valeurs de retour de la fonction Data_Loader->load en fonction des différentes fonctions de test.
Si quelqu'un avait un peu d'expérience dans ce domaine, je suis preneur.
Merci