JeuWeb - Crée ton jeu par navigateur
Gérez vous les échecs d'inclusion ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Gérez vous les échecs d'inclusion ? (/showthread.php?tid=5364)

Pages : 1 2 3


RE: Gérez vous les échecs d'inclusion ? - niahoo - 08-04-2011

j'utilise require parce que ça stoppe l'exécution du script dans le cas (quasi impossible) ou is_file() renverrait true mais que le require echoue.


RE: Gérez vous les échecs d'inclusion ? - Ter Rowan - 08-04-2011

(08-04-2011, 08:36 AM)Sephi-Chan a écrit : Tu devrais songer à écrire des tests plus sérieux avec PHP Unit par exemple. Là tu te prends la tête pour rien. Smile
Sephi-Chan
j'y avais songé ^^ mais le gap d'apprentissage est trop important.

Je mettrais peut être autant de temps, voire plus, avec certainement moins de qualité et de fonctionnalités que ce qui est proposé sur la toile, mais je trouve du plaisir à me construire un "outil" de ce type (enfin une pauvre classe de 50-10 lignes :p )

Autant j'exige des équipes de développement que je sollicite dans mon job qu'elles industrialisent leurs tests avec les outils du marché, autant là, rien à taper (je ne serais jamais dévelopeur trop, ou bien ça voudra dire que j'ai hash-ement réorienté ma carrière)



RE: Gérez vous les échecs d'inclusion ? - niahoo - 08-04-2011

essaie simpletest alors, ça mange pas de pain et ça s'apprend en 30 secondes


RE: Gérez vous les échecs d'inclusion ? - Ter Rowan - 08-04-2011

j'ai un problème avec ton système finalement, il a fallu que je comprenne....

is_file me renvoie un false quand à ma fichier alors que le include/require fonctionne


évidemment.... is_file ne se préoccupe pas du set_include_path

As tu une solution à cela ?


RE: Gérez vous les échecs d'inclusion ? - Ter Rowan - 08-04-2011

finalement voici ce que j'ai fait :

pour le is_file qui me plantait le include_path (j'ai pompé le code dans la doc php)

function IsFile($file)
{
if(!file_exists($file))

{
$paths=explode(PATH_SEPARATOR,get_include_path());

foreach($paths as $p)
if(file_exists(preg_replace('%/$%','',$p)."/$file"))
return true;

return false;
}
else
return true;
}

j'espère juste que ce n'est pas trop long :/

enfin pour mon traitement des tests :
une petite classe de test :
class Test
{
protected $_report = array();
protected $_traces = array();

/*insertion d'un cas test */
function NewCase($title, $expected, $object, $method, $args)
{
/* obtention du résultat $r */
try
{
if ($object)
$r = call_user_func_array( array($object, $method), $args);
else
$r = call_user_func_array( $method, $args);
}
catch (classError $e)
{
// dans le cas d'une erreur attendue, le retour est l'erreur
$r = $e->GetInternalError();
$this->_traces[$title] = $e->GetTraces();
}
catch (exception $e)
{
// dans le cas d'une exception inattendue, le retour est la trace complète de l'erreur
$r = $e->GetTrace();
}

/* controle entre l'attendu $expected et le résultat $r */
if ( strcmp(serialize($expected), serialize($r) ) )
$this->_report[$title] = array(false, serialize($expected), serialize($r));
else
$this->_report[$title] = array(true, serialize($expected));
}

/* insertion d'une ligne de titre */
function NewCategory($title)
{
$this->_report[$title] = array();
}

/* affichage du rapport */
function Show()
{
$count = 0;
$errors = 0;
echo '<table><tr><th>Cas Test</th><th>Résultat</th><th>Attendu</th><th>Obtenu</th></tr>';

foreach( $this->_report as $test => $result)
{
if(count($result))
{
echo "<tr><th>$test</th>";

$count++;
if ($result[0])
{
echo "<td class='ok'>ok</td>";
echo "<td colspan=2>{$result[1]}</td>";
}
else
{
$errors++;
echo "<td class='ko'>ko</td>";
echo "<td>{$result[1]}</td>";
echo "<td>{$result[2]}</td>";
}
}
else
{
echo "<tr><th class='title' colspan=4>$test</th>";
}
echo "</tr>";
}
if ($errors>0)
$class= "ko";
else
$class= "ok";
echo "</table><br/><span class='$class'>$errors</span> tests sur $count sont en échec";
}
}

et pour des tests, on l'utilise assez aisément je trouve :


$test->NewCategory('Module');

$test->NewCase('création d un module existant', true, $system, 'SetModule', array('prems','classeExiste'));
$test->NewCase('appel d un module existant', new classeExiste, $system,'GetModule', array('prems'));
$test->NewCase('tentative de création d un module inexistant',
'chargement impossible de la classe s:15:"classeExistePas"; pour le module s:4:"deuz"; pour s:10:"systemRoot";',
$system, 'SetModule', array('deuz', 'classeExistePas'));
dans le premier cas je m'attends au retour de "true" lorsque j'appellerais $system->SetModule avec les paramètres qui suivent
dans le deuxieme cas, le retour de $system->GetModule est une classe qui s'appelle classeExiste (bon elle est vide pour le test, si on doit comparer des données il faudra les mettre dedans

dans le troisème cas, je m'attends à une erreur du programme (exception), dont le texte est celui décrit


RE: Gérez vous les échecs d'inclusion ? - srm - 08-04-2011

Et bien voire si le fichier existe dans tous les répertoires définis par le set_include_path Wink
Ceci dit je vais relire le problème depuis le début pour voir.
(07-04-2011, 10:48 PM)Ter Rowan a écrit : exemple j utilise deux design pattern qui me font inclure en "dynamique" (ie include $fichier) des classes

à savoir
factory pour la génération d'objets
strategy pour des changements dynamiques de comportement

donc comme d'hab ca marche sur le poste en dev, et tu passes en prod et patatra la classe que t as oublié de tester qui n'est pas présente

Je ne vois pas comment ça peut arriver...
Tu développes une fonction donc tu la test non ?
Donc en dev elle doit marcher, donc si en dev elle marche, en prod le fichier y est aussi.



RE: Gérez vous les échecs d'inclusion ? - Ter Rowan - 08-04-2011

(08-04-2011, 11:31 PM)oxman a écrit : Donc en dev elle doit marcher, donc si en dev elle marche, en prod le fichier y est aussi.

ah si c'était vrai ce que tu dis, .... je serais tellement mieux dans mon job ^^

je ne ferais pas autant de mail de crise pour expliquer pourquoi un déploiement a échoué, tout ça parce que un gars quelque part à oublier dans le script de déploiement ou quoique ce soit d'autre une ligne, ou fait une faute, ou etc... (enfin je parle au boulot)

donc a la maison, même combat je me blinde la dessus



RE: Gérez vous les échecs d'inclusion ? - srm - 09-04-2011

Vous déployez comment ?


RE: Gérez vous les échecs d'inclusion ? - Ter Rowan - 09-04-2011

oula je maitrise pas complètement


équipe de dev déploie en intégration à la main, puis en recette (plus ou moins à la main)
équipe de dev fournit à équipe de qualification, scripts bdd et liste des fichiers à copier (pour .net) ou ear (pour java)
équipe de qualification déploie en préprod et si ça marche en prod


cependant on peut avoir plusieurs sous versions déployées en recette avant d'en déployer une en préproduction, c'est la le point principal d'erreur des déploiements (on a oublié un fichier ou un script)

pas encore d'intégration continue, quoique je ne sais pas si ça résoudra complètement le problème

mon explication est un peu fumeuse, je survole un peu ces trucs là, si le résultat déconne je gueule, mais ce n'est pas moi qui peut apporter une solution ^^


RE: Gérez vous les échecs d'inclusion ? - srm - 09-04-2011

Normalement tu pousses toute la sous version de recette en préproduction, pas juste les fichiers qui ont été modifiés.