Comment faire échouer le test Delphi DUnit lorsque TSQLConnection.Connected = true

StackOverflow https://stackoverflow.com/questions/457363

  •  19-08-2019
  •  | 
  •  

Question

Lors de l’utilisation de Delphi IDE, SQLConnection est modifié en mode silencieux. Connecté à " true " lors du remplissage de listes de champs ou de tables dans diverses propriétés.

Etant donné que je ne souhaite pas publier avec Connected = true, le test dunit doit échouer lorsque TSQLConnection.Connected reste à true dans dfm.

Était-ce utile?

La solution

Je résous ceci d'une autre manière. J'ai écrit un petit utilitaire qui charge un fichier DFM et cherche des propriétés qui ne devraient pas être présentes. Incluant les valeurs database.connected = true.

Ceci peut être modifié pour fonctionner avec toutes les propriétés appropriées. J'ai mis le noyau du code ici aussi.

Pour rendre cela vraiment utile, vous devriez utiliser cet utilitaire dans votre script de construction (j'utilise FinalBuilder). Mon script commence par une boucle sur les fichiers .dfm, supprimant l'une de ces propriétés, puis il compile et exécute les tests unitaires. S'ils réussissent, l'application principale continue à être créée. Pour moi, c'est un meilleur moyen que l'échec d'un test unitaire, car vous pouvez partir d'un bon point garanti.

nState := 0;
bFound := False;
for nFileLoop := 0 to memoFile.Lines.Count - 1 do
begin
  szLine := memoFile.Lines[nFileLoop];

  case nState of      //
  0:
     begin
        if(0 <> Pos('TADOConnection', szLine)) then
        begin
           szSeeking := 'Connected';
           nState := 1;
        end
        else if(0 <> Pos('TADOTable', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TADOQuery', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMTable', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMDatabase', szLine)) then
        begin
           szSeeking := 'Connected';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMSession', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMQuery', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end;
     end;
  1 :
     begin
        bFound := True;
        if(0 <> Pos('end', szLine)) then
        begin
           nState := 0;
        end
        else if(0 <> Pos(szSeeking, szLine)) then
        begin
           nPos := Pos('=', szLine);
           if nPos > 0 then
           begin
              memoFile.Lines[nFileLoop] := Copy(szLine, 1, nPos) + ' False';
           end;
        end;
     end;
  end;      // case
end;

Autres conseils

GExperts a un " Définir les propriétés du composant " expert que nous configurons pour fermer les connexions de base de données à chaque compilation. Depuis, nous n’avons pas eu le problème.

Vous pouvez écrire votre propre descendant de TSQLConnection qui ne stocke pas sa propriété Connected:

  TdzAdoConnection = class(TADOConnection)
  published
    property Connected stored false;
  end;

et utilisez ce composant plutôt que TSqlConnection.

(Ce qui précède concerne TAdoConnection, mais TSQLConnection devrait également fonctionner correctement.)

OpenCTF - Le framework de test de composant pour Delphi peut être intéressant, il crée automatiquement des tests unitaires pour les propriétés spécifiées de tous les composants dans toutes les formes / datamodules. Il est open source et facile à utiliser.

" Mise en route " document: http://www.habarisoft.com/download/OpenCTFGettingStarted.pdf

  

Le framework de test de composant OpenCTF   aide à construire des tests automatiques pour tous   Composants VCL (visuels et non visuels)   dans une application Delphi. Il est basé   sur le framework DUnit.

Quelques exemples d'utilisation:

  • détecte les valeurs de propriété manquantes ou incorrectes - p. ex. Boutons sans actions assignées, DataSources sans DataSet associé
  • détecter les gestionnaires d’événements non affectés - par exemple, événement OnExecute manquant
  • vérifier que tous les ensembles de données peuvent être ouverts
  • vérifier l'ordre de tabulation
  • trouver des composants invisibles (par exemple, TabSheets invisibles qui devraient être cachés au moment de l'exécution)

OpenCTF http://www.mikejustin.com/images/OpenCTF.gif

Une autre solution à ce problème consiste à implémenter un hook de pré-validation dans votre SCM. J'utilise TortoiseSVN, et j'ai fait des choses similaires pour empêcher les choses de se faufiler dedans. Par exemple, nous avons un "skins". bibliothèque qui tente d’ajouter environ une douzaine d’unités d’apparence à tout formulaire ouvert dans l’EDI. (Nous avons un correctif de registre qui "corrige" ce problème, mais il devient "non terminé" de temps en temps, si un développeur réinstalle des composants). J'ai donc une "liste de chaînes interdites". dans un fichier .ini qui se trouve dans un hook de pré-validation SVN.

Dans notre environnement, tout le code de production est construit sur une "machine de génération" dédiée. Par conséquent, si le code n'est pas archivé, il ne sera pas intégré à la construction. Problème résolu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top