Sign in Join
Wiki copytemporary

FPTest/fr: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11FPTest (Free Pascal Testing Framework) est un framework de test d'unité. C'est une branche (*fork*) du projet DUnit2 créé par feu Peter McNab, mais adapté spécialement pour l'utilisation avec le compilateur Free Pascal.
22
33La plupart des articles listés ci-dessous sont relatifs au projet DUnit2 original (et maintenant le projet FPTest) et comment il diffère du projet DUnit. L'information sur la migration depuis [[fpcunit/fr|fpcunit]] est aussi présentée.
44
55# Caractéristiques
66
77Objectifs de conception utilisés lors du développement du projet, pas nécessairement dans un ordre particulier :
88
99- Introduire SetUpOnce et TearDownOnce par TestCase et TestSuite.
1010- Améliore la vitesse d'exécutiojn des tests
1111- Introduit les projets multiples et ouvre la voie à l'exécution de projet de test dans des threads séparés.
1212- Améliore la facilité d'utilisation de FPTest (en partie en ajoutant plus d'exemples dans la documentation).
1313- Garantit que les *Constructeurs* et *Destructeurs* de TTestCase s'exécutent une seule fois, pas pour chaque méthode de test contenue.
1414- Fournir un moyen non global var pour partager des données de configuration de haut niveau entre les unités de test.
1515- Des résultats de test plus précis et des retours améliorés.
1616- Fournit un décompte visuel des fuites de mémoire détectées et des tests sans Check().
1717- Fournit un décompte facultatif pour identifier quels appels Check() ont échoué.
1818- Nettoyage du code, en supprimant dans FPTest le code "légataire" (*legacy*), tel que le code spécifique Delphi Win32 et .Net.
1919- Test Runner en mode texte pour ceux qui aiment les consoles ou pour la suite de tests sans assistance qui s'exécute sur les serveurs.
2020- Une nouvelle IHM du Test Runner pour [[fpGUI/fr|fpGUI]] ou les projet basés sur la LCL.
2121- Un décorateur de test encore plus avancé qui tourne actuellement (celui de FPCUnit est totalement délabré).
2222- Les tests enregistrés peuvent être bien mieux organisés, en construisant une hiérarchie de tests, les rendant plkus faciles à gérer (activer, désactiver, sauter les tests etc.)
2323
2424# Etat actuel
2525
2626- Le nouveau code reste compatible avec les suites de test existantes ne s'appuyant pas sur le code DUnit modifié par l'utilisateur.
2727- Si vos projets de test FPCUnit utilise les méthodes CheckXXX() et non pas les méthodes AssertXXX(), il sera plutôt facile de basculer de FPCUnit vers le framework de test FPTest.
2828- Le nouveau code reste compatible avec les suites de test existantes ne s'appuyant pas sur les fonctions TestFramework de bas niveau (p.ex. TTestResult).
2929- Le nouveau code introduit les classes Project et ProjectManager entre l'IHM et les TextTestRunners pour assister la future introduction du test d'unité avec des threads.
3030- Le code de SetupOnce et TeardownOnce réduit le désordre de noeud et de nom où les décorateurs aurait été requis avant. *!e décorateur de test dans FPCUnit a des défauts de conception, et ne marche pas comme attendu.*
3131- Le nouveau code de décoration de test est plus facile à comprendre et étendre.
3232- La profondeur d'appel à l'exécution par TestCase a été réduite dans un effort pour améliorer l'efficacité du test. (le chemin d'exécution est plus facile à suivre et facilite les futurs changements dans le code).
3333- Le chronométrage de la procédure de test est maintenant pris seulement sur la méthode de test et exclut les temps de SetUp et TearDown. L'intention étant de fournir une pkus haute précision du chronométrage pour le profilage de méthode. Le temps global englobe encore tout le code.
3434- Toutes les procédures Check existantes sont supportées. Plusieurs nouvelles procédures Check ont été ajoutées pour compléter l'éventail disponible.
3535- De nouvelles unités ont été créées pour vérifier que toutes les procédures Check() détectent les conditions passer et échouer.
3636- Tous les tests s'exécutent sans fuite de mémoire ou besoin de permettre des fuites.
3737- De nouveaux tests d'unités auto-test sont plus compréhensible en incluant des contrôles pour assurer les conditions de configuration sont proprement satisfaites avant d'exécuter les tests requis.
3838- Une classe Project gère maintenant l'enregistrement et l'exécution des TestCases groupés (TestSuites) et des TestCases.
3939- Les tests comptés peuvent maintenant être invoqués dans les décorateurs de test pour fournir des données de test à 2 dimensions ou plus.
4040- Les tests vides non optimisés échouent toujours.
4141- Les tests qui n'appellent pas Check() peuvent être globalement armés pour échouer, i.e. depuis l'IHM.
4242- Similairement les tests provoquant des fuites de mémoire peuvent être globalement armés pour échouer.
4343- Des test individuels peuvent optionnellement surcharger les réglages IHM (i.e. où un composant tierce partie a une fuite connue).
4444- Tous les tests qui surchargent les réglages IHM peuvent optionnellement être identifiés après l'exécution du test par des couleurs de noeud additionnelles.
4545- Un décompte des échecs des tests surchargés est inclus dans l'affichage du status d'exécution.
4646- Les tests surchargés qui auraient autrement échoué génèrent un décompte d'avertissements séparé dans l'IHM et la sortie texte mise à jour.
4747- Les noms de méthodes de test sont découplées du processus d'exécution, permettant aux informations post-compilation d'être affichées au niveau IHM.
4848- Générateur de rapport XML ajouté, complétant à la fois GUITestRunner et TextTestRunner.
4949- Ajoutée la capacité de GUITestRunner et TextTestRunner ensemble, de sauter (exclure) des tests individuels séparée de l'activation/désactivation de test.
5050- Des boutons d'outil à GUITestRunner pour faciliter le contrôle et montrer à l'exécution quelles options ont été sélectionnées.
5151
5252Pour faciliter les tests précoces sans reconstruire complètement GUITestsRunner et TextTestRunner, une unité proxy intermédiaire et un remplacement des TTestResults ont été intercalés entre l'interface graphique et le nouveau framework de test. Bien que l'objectif initial était éventuellement de repenser complètement l'interface graphique, les classes "Proxy" fonctionnent très bien et peuvent ne pas nécessiter de travail supplémentaire.
5353
5454# Obtenir le code source
5555
5656Le code source est librement accessible depuis GitHub en utilisant la commande suivante :
5757
5858``` bash
5959git clone git://github.com/graemeg/fptest.git
6060```
6161
6262ou
6363
6464``` bash
6565git clone https://github.com/graemeg/fptest.git
6666```
6767
6868Si vous n'avez pas installé [Git](http://git-scm.com/), vous pouvez aussi récupérer une archive tarball du code source, en utilisant l'URL suivante.
6969
70-[`https://github.com/graemeg/fptest/tarball/master`](https://github.com/graemeg/fptest/tarball/master)
70+```text
71+https://github.com/graemeg/fptest/tarball/master
72+```
7173
7274Le projet FPTest est en développement actif, ainsi le code et la documentation sont constamment améliorés. Pour cette raison, je vous recommande hautement de récupérer le code source via Git au lieu de l'archive tarball.
7375
7476# Documentation
7577
7678La documentation eut être trouvée dans le répertoire *docs* en fichiers HTML.
7779
7880# Exemple de test
7981
8082Voici un échantillon de projet de test en console.
8183
8284``` pascal
8385program project1;
8486
8587{$mode objfpc}{$H+}
8688
8789uses
8890 Classes,
8991 TextTestRunner,
9092 sample_tests;
9193
9294begin
9395 // Register all tests
9496 sample_tests.RegisterTests;
9597
9698 RunRegisteredTests;
9799end.
98100```
99101
100102et l'unité contenant les tests actuels ...
101103
102104``` pascal
103105unit sample_tests;
104106
105107{$mode objfpc}{$H+}
106108
107109interface
108110
109111uses
110112 TestFramework; // required for TTestCase and CheckXXX() references
111113
112114type
113115 TTestCaseFirst = class(TTestCase)
114116 published
115117 procedure TestWarning;
116118 procedure TestOne;
117119 procedure TestNoError;
118120 procedure TestThree;
119121 procedure TestFour;
120122 end;
121123
122124procedure RegisterTests;
123125
124126implementation
125127
126128uses
127129 SysUtils;
128130
129131{ here we register all our test classes }
130132procedure RegisterTests;
131133begin
132134 TestFramework.RegisterTest(TTestCaseFirst.Suite);
133135end;
134136
135137{ TTestCaseFirst }
136138
137139procedure TTestCaseFirst.TestWarning;
138140begin
139141 // Do nothing here - should cause a Warning
140142end;
141143
142144procedure TTestCaseFirst.TestOne;
143145begin
144146 Check(1 + 1 = 3, 'Catastrophic arithmetic failure!');
145147end;
146148
147149procedure TTestCaseFirst.TestNoError;
148150begin
149151 Check(1 + 1 = 2, 'Catastrophic arithmetic failure!');
150152end;
151153
152154procedure TTestCaseFirst.TestThree;
153155var
154156 s: string;
155157begin
156158 s := 'hello';
157159 CheckEquals('Hello', s, 'Failed CheckEquals');
158160end;
159161
160162procedure TTestCaseFirst.TestFour;
161163var
162164 x, y: integer;
163165begin
164166 x := 10;
165167 y := 0;
166168 Check(x / y = 0, 'Failed on 1');
167169end;
168170
169171end.
170172```
171173
172174# Captures d'écran
173175
174176Voici une captuire d'écran d'une sortie du Test Runner en mode texte.
175177
176178![](/wiki-images/8/80/Fptest_console.png)
177179
178180Voici une capture d'écran du Test Runner avec IHM (utilisant le Toolkit fpGUI) pour exécuter la suite de tests tiOPF.
179181
180182![](/wiki-images/0/0a/Fptest_fpgui.png)
181183
182184# Comment le comparer à FPCUnit?
183185
184186J'ai (Graeme Geldenhuys) été un utilisateur de longue date de FPCUnit. J'ai contribué à l'extension du projet FPCUnit. Mais FPCUnit a quelques défauts de conception qui le rendent plus utiles pour les projets plus petits et des suites de tests moins compliquées. Les décorateurs de test de FPCUnit, Setup/Teardown etc sont sévèrement délabrés. Le framework de test surmonte tous ces problèmes, ajoute de nouvelles fonctionnalités, il est plus facile de gérer vos tests, et les exécute plus rapidement que des projets équivalents FPCUnit ou Dunit.
185187
186188La bonne nouvelle est vous n'êtes pas forcés de choisir entre les frameworks de test. Il y plusieurs années, j'ai inclus une interface de compatibilité DUnit/FPTest à FPCUnit. Ce qui vous donne un bon chemin de mise à jour de FPCUnit vers FPTest. Donc si vous concevez votre suite de test en utilisant des appels CheckXXX() (au lieu des appels AssertXXX()), vous pourrez plus tard basculer facilement vers le framework FPTest sans avoir besoin de changer votre code de test.
187189
188190# Voir aussi
189191
190192- [[fpcunit/fr|fpcunit]] Framework de test d'unité fourni avec FPC
191193- <https://www.freepascal.org/~michael/articles/unittesting/unittesting.pdf> Article sur le test d'unité (DUnit).
192194
193195---
194196*From the Free Pascal wiki, page "FPTest/fr", as it stood on 2020-02-16 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history