08-04-2011, 11:30 PM
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)
j'espère juste que ce n'est pas trop long :/
enfin pour mon traitement des tests :
une petite classe de test :
et pour des tests, on l'utilise assez aisément je trouve :
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
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 suiventdans 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