Sign in Join
Wiki copytemporary

FPTest/fr: what changed

Revision 1 to 2. 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
7070[`https://github.com/graemeg/fptest/tarball/master`](https://github.com/graemeg/fptest/tarball/master)
7171
7272Le 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.
7373
7474# Documentation
7575
7676La documentation eut être trouvée dans le répertoire *docs* en fichiers HTML.
7777
7878# Exemple de test
7979
8080Voici un échantillon de projet de test en console.
8181
8282``` pascal
8383program project1;
8484
8585{$mode objfpc}{$H+}
8686
8787uses
8888 Classes,
8989 TextTestRunner,
9090 sample_tests;
9191
9292begin
9393 // Register all tests
9494 sample_tests.RegisterTests;
9595
9696 RunRegisteredTests;
9797end.
9898```
9999
100100et l'unité contenant les tests actuels ...
101101
102102``` pascal
103103unit sample_tests;
104104
105105{$mode objfpc}{$H+}
106106
107107interface
108108
109109uses
110110 TestFramework; // required for TTestCase and CheckXXX() references
111111
112112type
113113 TTestCaseFirst = class(TTestCase)
114114 published
115115 procedure TestWarning;
116116 procedure TestOne;
117117 procedure TestNoError;
118118 procedure TestThree;
119119 procedure TestFour;
120120 end;
121121
122122procedure RegisterTests;
123123
124124implementation
125125
126126uses
127127 SysUtils;
128128
129129{ here we register all our test classes }
130130procedure RegisterTests;
131131begin
132132 TestFramework.RegisterTest(TTestCaseFirst.Suite);
133133end;
134134
135135{ TTestCaseFirst }
136136
137137procedure TTestCaseFirst.TestWarning;
138138begin
139139 // Do nothing here - should cause a Warning
140140end;
141141
142142procedure TTestCaseFirst.TestOne;
143143begin
144144 Check(1 + 1 = 3, 'Catastrophic arithmetic failure!');
145145end;
146146
147147procedure TTestCaseFirst.TestNoError;
148148begin
149149 Check(1 + 1 = 2, 'Catastrophic arithmetic failure!');
150150end;
151151
152152procedure TTestCaseFirst.TestThree;
153153var
154154 s: string;
155155begin
156156 s := 'hello';
157157 CheckEquals('Hello', s, 'Failed CheckEquals');
158158end;
159159
160160procedure TTestCaseFirst.TestFour;
161161var
162162 x, y: integer;
163163begin
164164 x := 10;
165165 y := 0;
166166 Check(x / y = 0, 'Failed on 1');
167167end;
168168
169169end.
170170```
171171
172172# Captures d'écran
173173
174174Voici une captuire d'écran d'une sortie du Test Runner en mode texte.
175175
176-<figure>
177-<img src="fptest_console.png" title="échantillon de sortie de la console Test Runner en mode texte." />
178-<figcaption>échantillon de sortie de la console Test Runner en mode texte.</figcaption>
179-</figure>
176+![](/wiki-images/8/80/Fptest_console.png)
180177
181178Voici une capture d'écran du Test Runner avec IHM (utilisant le Toolkit fpGUI) pour exécuter la suite de tests tiOPF.
182179
183-<figure>
184-<img src="fptest_fpgui.png" title="Une capture d&#39;écran de l&#39;IHM Test Runner utilisant le toolkit fpGUI." />
185-<figcaption>Une capture d'écran de l'IHM Test Runner utilisant le toolkit fpGUI.</figcaption>
186-</figure>
180+![](/wiki-images/0/0a/Fptest_fpgui.png)
187181
188182# Comment le comparer à FPCUnit?
189183
190184J'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.
191185
192186La 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.
193187
194188# Voir aussi
195189
196190- [[fpcunit/fr|fpcunit]] Framework de test d'unité fourni avec FPC
197191- <https://www.freepascal.org/~michael/articles/unittesting/unittesting.pdf> Article sur le test d'unité (DUnit).
198192
199193---
200194*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