Environnement des tests unitaires (testsuite)

De Wiki1000

Une bonne pratique consiste à exécuter les tests unitaires dans un Dossier de test qui présente la particularité de n'être pas rattaché à une base de données.

A l'intérieur de ce dossier vos premiers tests enregistreront et créeront une base de données puis initialiseront cette base des données de test. Ainsi vos tests s'exécuteront dans un environnement isolé et stable qui garantira la reproductibilité.

Pour ce faire :

1. Créer un dossier de test dans l'administration en cochant l'option "Ce dossier est un dossier de test" sur la page de sélection de la base de données.

2. A l'intérieur de vos tests définissez une première classe de test dont la responsabilité est de :

  • Enregistrer une base de données dont le nom est unique et lié à votre session de test.
  • Supprimer cette base de données
  • Créer cette base de données
  • Synchroniser cette base de données
  • Exécuter un script d'initialisation sur cette base de données
  • Initialiser cette base de données

Créer ensuite vos donner de test.

Actuellement, il est recommandé d'intégrer à votre application le module "Module Test Suite - Core" si vous souhaiter utiliser cette fonctionnalité, ce module contenant la classe de test fourni dans cet article.

image9.png

L'arborescence des tests doit être organisée de sorte que ces tests d'initialisation soient exécutés en premier, utilisé l'ordre du nom de test pour ceci.

Le code de ces tests sera le suivant :

//Procedure Test_0_RegisterDatabase;
var dbi:TDatabaseInfo;
begin
  Abort(GlbTestSuiteEnvName<>'','Test environnement not set');
  Abort(GlbTestSuiteDatabaseName<>'','Test database name not set');
  dbi := ClassManager.RegisterTestDatabase(GlbTestSuiteEnvName,GlbTestSuiteDatabaseName);
  Abort(Assigned(dbi),'Register database failed');
  ClassManager.defDatabaseURL := dbi.URL;
end;
 
//Procedure Test_1_drop_database;
var dbi:TDatabaseinfo;
begin
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);
  Check(Assigned(dbi),'No database context');
  Abort(ClassManager.DropDatabase(dbi),'Drop database failed');
end;
 
//Procedure Test_2_create_database;
var dbi:TDatabaseinfo;
begin
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);
  Check(Assigned(dbi),'No database context');
  Abort(ClassManager.CreateDatabase(dbi),'Create database failed');
end;
 
//Procedure Test_3_sync_database;
var dbi:TDatabaseinfo;
begin
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);
  Check(Assigned(dbi),'No database context');
  Abort(ClassManager.SyncDatabase(dbi),'Sync database failed');
end;
 
//Procedure Test_4_execute_script;
var dbi:TDatabaseinfo;errorMsg:string;
begin
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);
  Check(Assigned(dbi),'No database context');
  Abort(ClassManager.ExecuteTestSuiteScript(dbi,GlbTestSuiteEnvName,errorMsg),errorMsg);
end;
 
//Procedure Test_5_init_database;
var dbi:TDatabaseinfo;
begin
  dbi := ClassManager.DatabaseByURL(ClassManager.DefDatabaseURL);
  Check(Assigned(dbi),'No database context');
  Abort(ClassManager.InitDatabase(dbi),'Init database failed');
end;

Les paramètres GlbTestSuiteEnvName et GlbTestSuiteDatabaseName font référence à des paramètres du contexte qui peuvent être défini au niveau des préférences du concepteur de modèle :

image10.png

GlbTestSuiteEnvName

Nom d'un contexte de test, le contexte défini les paramètres de la base de données.

A noter que cet environnement peut contenir le script nécessaire à l'initialisation de la base. Il est IMPÉRATIF de n'employer cette possibilité uniquement si c'est réellement nécessaire, auquel cas il doit être le plus court possible.

GlbTestSuiteDatabaseName

Nom de la base de données

Voir aussi :

Outils personnels