Les Fixtures

Plan

  1. Concept de Fixtures
  2. Syntaxe des Fixtures
  3. Points importants à retenir

 

Concept de Fixtures

Il arrive souvent que l'on veuille utiliser une même structure ou une même classe pour une série de tests unitaires. Ceci est rendu possible grâce aux fixtures.

Il s'agit tout d'abord de déclarer les objets et structures que l'on utilisera, puis d'ajouter le code d'initialisation de ces objets et enfin, d'ajouter le code permettant la destruction de ces objets. Ces trois parties représentent les fixtures d'un TestCase.

Puisque les tests unitaires sont indépendants l'un de l'autre, le code d'initialisation sera exécuté avant chaque test unitaire et le code de finalisation (destruction), sera exécuté après chaque test unitaire. Tout changement à un objet ou à une structure durant un test n'affectera donc pas les autres tests.

Retour au haut de la page

 

Syntaxe des Fixtures

Tout d'abord, il faut déclarer les structures et les objets que l'on veut utiliser dans nos tests unitaires. On utilise la macro DECLARE et END_DECLARE :

DECLARE(NomTestCase)
  Pile *p1;
  Pile *p2;
END_DECLARE

À l'intérieur du bloc DECLARE, il ne faut que déclarer des objets, des variables ou des structures. Il est très important de ne pas les initialiser. Ce bloc de code appartient en fait à la partie "protected" d'une classe et doit donc respecter la syntaxe de C++ dans ce cas.

Ensuite, on doit écrire le code d'initialisation en utilisant la macro SETUP:

SETUP(NomTestCase)
{
  p1 = new Pile();
  p2 = new Pile();

  p1->empiler(1);
}

L'utilisation de la macro SETUP est obligatoire si on utilise les fixtures. Si vous n'avez pas besoin d'initialiser vos objets ou vos variables, vous n'avez qu'à ne pas placer de code entre les accolades de SETUP. Toute variable déclarée à l'intérieur du bloc SETUP ne sera pas accessible par les tests unitaires: elles doivent être déclarées dans le bloc DECLARE.

Enfin, on doit écrire le code de finalisation en utilisant la macro TEARDOWN:

TEARDOWN(NomTestCase)
{
  delete p1;
  delete p2;

}

Encore une fois, l'utilisation de la macro TEARDOWN est obligatoire si on utilise les fixtures. Si vous n'avez pas besoin de détruire vos objets ou vos variables, vous n'avez qu'à ne pas placer de code entre les accolades de TEARDOWN.

Par la suite, vous pouvez commencer à écrire vos tests unitaires. Pour ce faire, si vous désirez utiliser les fixtures du TestCase, vous devez utiliser la macro TESTF (F pour Fixtures):

TESTF(NomTestCase,NomTest)
{
  ASSERT_TRUE(p1.taille() == 0);
  ASSERT_TRUE(p2.taille() == 1);
}

La macro TESTF est très similaire à la macro TEST. La seule différence réside dans le fait qu'EasyUnit exécutera le code de SETUP avant le test et le code de TEARDOWN après le test. De plus, les objets et variables déclarées dans le bloc DECLARE seront accessibles par le code contenu dans TESTF.

Il est possible de mélanger l'utilisation de TESTF et TEST sans problème. EasyUnit ignorera simplement le code des fixtures lorsqu'il rencontrera les tests unitaires déclarés avec TEST.

Alors que l'utilisation de TESTF et TEST n'est pas assujettie à un ordre particulier (on peut insérer des TEST entre une série de TESTF), il est très important que DECLARE, END_DECLARE, SETUP et TEARDOWN soient déclarés dans cet ordre et avant les TESTF et TEST. Si cet ordre n'est pas respecté, le compilateur vous indiquera une ou plusieurs erreurs.

Retour au haut de la page

 

Points importants à retenir

  • Les fixtures d'un TestCase comprennent une partie DECLARE - END_DECLARE pour la déclaration des variables, SETUP pour l'initialisation des variables et TEARDOWN pour la finalisation (destruction) des variables.
  • Les fixtures doivent toujours être utilisées dans le même ordre et avant les TEST et TESTF.
  • Pour être en mesure d'utiliser les fixtures, un test unitaire doit être déclaré à l'aide de la macro TESTF.
  • Comme pour l'utilisation de TEST, les fixtures et les tests unitaires d'un TESTCASE doivent se retrouver dans le même fichier et doivent se suivre pour être valides.
  • Si l'ordre d'utilisation des macros n'est pas respecté ou si une macro TESTF est utilisée avant les fixtures ou est séparée du TestCase, le compilateur produira invariablement une ou plusieurs erreurs reliées à la définition de classes.


 


© 2004 Barthélémy Dagenais
EasyUnit est distribué sous la license LGPL