Tests unitaires à Delphi-Comment faites-vous? [fermé]

Je me demande comment les quelques utilisateurs de Delphi font des tests unitaires, le cas échéant? Y a-t-il quelque chose qui s'intègre à L'IDE que vous avez trouvé fonctionne bien? Si non, quels outils utilisez-vous et avez-vous ou connaissez des exemple de mini-projets qui démontrent comment tout cela fonctionne?

Mise à jour:

J'ai oublié de mentionner que J'utilise BDS 2006 Pro, bien que je tombe parfois dans Delphi 7, et bien sûr d'autres peuvent utiliser d'autres versions.

57
demandé sur Bruce McGee 2008-08-20 20:12:50

9 réponses

DUnit est un type xUnit de framework de test unitaire à utiliser avec win32 Delphi. Depuis Delphi 2005 DUnit est intégré à un point certan dans L'IDE. D'autres outils D'intégration DUnit pour L'IDE Delphi peuvent être trouvés ici . DUnit est livré avec documentation avec des exemples.

39
répondu Lars Truijens 2008-08-20 18:26:09

Il y a quelques add-ons pour DUnit, peut-être que cela vaut la peine d'une nouvelle entrée sur SO. Deux que je peux mettre sur la liste sont maintenant

  1. FastMM4 Intégration: les tests unitaires détectent automatiquement les fuites de mémoire (et d'autres choses), fonctionne avec DUnit 9.3 et plus récent
  2. OpenCTF est un composant de test cadre d'analyse basé sur DUnit, il crée les tests dynamiquement pour tous les composants du projet formulaires, cadres et datamodules, et les teste en utilisant règles personnalisées (open source)

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

18
répondu mjn 2010-11-10 17:36:44

DUnit2 est disponible à partir de http://members.optusnet.com.au/~mcnabp/

DUnit2 est modifié plus régulièrement que le dunit original. Il fonctionne également sur Delphi 2009.

Essayer: http://sourceforge.net/projects/dunit2/ - il a déménagé comme l'auteur original Peter McNab est décédé il y a plusieurs années. Encore une activité sur la liste de diffusion dunit.

9
répondu Sean Cross 2013-07-11 10:59:07

Il y a un nouveau framework de test unitaire pour les versions Delphi modernes en développement: https://github.com/VSoftTechnologies/DUnitX

9
répondu Harriv 2013-10-22 09:05:54

Vous pouvez jeter un oeil aux classes de tests unitaires disponibles dans notre SynCommons open source unit. Il est utilisé dans notre framework Open-Source pour tous les tests de régression. Ce n'est peut-être pas le meilleur, mais cela vaut la peine d'y jeter un oeil.

Voir http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

Pour implémenter un test unitaire, vous déclarez simplement un nouveau cas de test en créant une classe comme celle-ci:

type
  TTestNumbersAdding = class(TSynTestCase)
  published
    procedure TestIntegerAdd;
    procedure TestDoubleAdd;
  end;

procedure TTestNumbersAdding.TestDoubleAdd;
var A,B: double;
    i: integer;
begin
  for i := 1 to 1000 do
  begin
    A := Random;
    B := Random;
    CheckSame(A+B,Adding(A,B));
  end;
end;

Ensuite, vous créez une combinaison de test, et de l'exécuter.

Dans la version 1.13 actuelle, il existe également un nouveau mécanisme de journalisation avec trace de pile de toute exception soulevée et telle, tout comme MadExcept, en utilisant.carte contenu du fichier source.

Il est maintenant utilisé par les classes de test unitaire, de sorte que tout échec créera une entrée dans le journal avec la ligne source, et trace de pile:

C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13)
Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545
TSynLogTest 1.13 2011-04-13 05:40:25

20110413 05402559 fail  TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163) 

La différence entre une combinaison de test sans journalisation et une combinaison de test avec journalisation est seulement ceci:

procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase);
begin
  inherited;
  with TestCase[fCurrentMethod] do
    fLogFile.Log(sllFail,'%: % "%"',
      [Ident,TestName[fCurrentMethodIndex],msg],aTest);
end;

Le mécanisme de journalisation peut faire beaucoup plus que simplement enregistrer les tests: vous pouvez enregistrer les appels récursifs des méthodes, sélectionner les informations que vous souhaitez afficher dans les journaux, profiler l'application du côté client, écrire des propriétés publiées, TList ou TCollection contenu comme JSON dans le contenu du journal, et ainsi de suite...

La première fois que le .fichier de carte est lu, une .fichier mab est créé, et contiendra toutes les informations de symbole nécessaires. Vous pouvez envoyer le .fichier mab avec le .exe à votre client, ou même intégrer son contenu à la .EXE. Ce .le fichier mab est optimisé: A.carte de 927,984 octets compresse dans un 71,943 .fichier mab.

Donc, cette unité pourrait être reconnue comme l'enfant naturel du mariage DUnit et MadExcept, en pure OpenSource. :)

Des informations Supplémentaires sont disponible sur notre forum. N'hésitez pas à demander. Commentaires et demandes de fonctionnalités sont les bienvenus! Fonctionne de Delphi 6 JUSQU'à XE.

8
répondu Arnaud Bouchez 2011-04-13 18:33:39

Habituellement, je crée un projet de test unitaire (Fichier - > Nouveau - > autre - > test unitaire - > projet de Test). Il contient les choses dont j'ai besoin, donc ça a été assez bon jusqu'à présent.

J'utilise delphi 2007 donc je ne sais pas vraiment si cela est disponible en 2006.

3
répondu PetriW 2008-08-24 12:53:25

Nous faisons des tests unitaires de tout le code logique en utilisant DUnit et utilisons le profileur de couverture de code inclus dans AQTime pour vérifier que tous les chemins à travers le code sont exécutés par les tests.

2
répondu lukeck 2008-09-15 15:11:28

Nous avons deux approches, d'abord nous avons des tests Dunit qui sont exécutés acheter les développeurs-ceux-ci s'assurent que le code qui vient d'être modifié fonctionne toujours comme avant. L'autre approche consiste à utiliser CruiseControl.NET pour construire des exécutables, puis exécuter les tests dunit chaque fois qu'une modification est effectuée, pour s'assurer qu'il n'y a pas de conséquences imprévues de la modification.

Beaucoup de notre base de code n'a pas de tests, de sorte que les tests automatiques sont un cas de développement continu afin d'assurer notre les applications fonctionnent comme nous le pensons.

2
répondu mmmm 2010-02-28 20:23:30

Nous avons essayé D'utiliser DUnit avec Delphi 5, mais cela n'a pas bien fonctionné. Spécialement si vous implémentez des interfaces COM, nous avons trouvé de nombreuses dépendances pour configurer toute l'infrastructure de test. Je ne sais pas si le support de test s'est amélioré dans les versions plus récentes.

1
répondu Gustavo 2008-08-20 18:44:29