PHPUnit : Effectuer des tests avec des sessions
Réaliser des tests unitaires est capital dans un développement informatique et il en est de même en développement web.
Il m’est arrivé d’avoir des problèmes pour tester des classes contenant des manipulations de sessions.
Voici comment procéder pour réaliser des tests unitaires sur des classes contenant des sessions.
La première chose à faire est de tester si le tableau de session est bien pris en compte ou non (avant la déclaration de la classe) :
if ( !isset( $_SESSION ) ) { $_SESSION = array(); }
Nous allons travailler avec une classe de test qui s’appelle CSaleTest et qui est donc déclaré comme suit :
class CSaleTest extends PHPUnit_Framework_TestCase {
On déclare une propriété statique qui simulera le tableau de session :
public static $shared_session = array();
Il y a maintenant deux méthodes spécifiques à PHPUnit à mettre en place « setUp » et « tearDown » :
public function setUp (){ $_SESSION = CSaleTest::$shared_session; } public function tearDown (){ CSaleTest::$shared_session = $_SESSION; }
On peut alors mettre en place nos tests unitaires comme :
public function testIsSaleFirstDay (){ $iIdSale = 2336; $_SESSION['firstDay'] = array(2336); $CSale = new CSale (); $b = $CSale->isSaleFirstDay($iIdSale); $this->assertTrue(is_bool($b)); }
Voilà c’est aussi simple que ça…surtout quand on le sait.
Merci à James Pic, qui a publié la solution sur stackoverflow.