Les tests automatisés avec dunit

Les tests automatisés avec dunit


erreur est humaine - automatique de test de code Delphi avec DUnit. Par Kris Golko



Pour introduire des bogues est humaine, le problème est généralement pas avec les corriger, mais avec de les trouver avant que vos clients ne. Automatisé, outils de tests de venir à la rescousse ici, avec leur capacité à répéter la procédure de test sans relâche, afin que les développeurs peuvent travailler avec beaucoup plus de confiance. Pourquoi choisir DUnit? Parce que c'est sur les tests unitaires (unit dans le sens de la construction d'un bloc de code plutôt que d'un Objet Pascal unité). Un autre avantage est que DUnit tests sont des cadres de travail pour exécuter du code, qui est plus rapide et plus pratique que l'exécution d'une application complète. Ce que j'aime le plus dans DUnit, c'est que je peux créer mon cas de test avec mon préféré outil de développement. DUnit supporte Delphi 4 à 7 ainsi que Kylix.



prise en main

DUnit est distribué sous forme de code source, il comprend un certain nombre de Delphi fichiers source, des exemples et de la documentation. Il peut être téléchargé depuis la page web du projet sur SourceForge sourceforge.net:/projets/dunit. Pour l'installer, il suffit de dézipper le fichier dans un répertoire de votre choix, en préservant les sous-répertoires. Les unités utilisées pour créer et exécuter des tests sont dans le répertoire 'src' sous-répertoire qui doit être ajouté à la Bibliothèque de Chemin d'accès dans 'Options de l'Environnement|de la Bibliothèque', ou le Chemin de Recherche de Projet|Options dans votre projet de test.



Comment écrire des cas de test

C'est facile: tout ce que vous avez à faire est de créer une classe héritée de TTestCase, TTestCase est déclarée dans le TestFramework unité. Pour ajouter des tests à une classe de cas de test, il suffit d'ajouter un publié procédure pour chaque test de votre classe dérivée. Un test runner objet utilise RTTI pour détecter quels sont les tests disponibles dans une classe de cas de test.



Il y a deux méthodes utiles: l'Installation et le Démontage. L'exécution de chaque cas de test au sein d'une classe commence avec le programme d'Installation, puis vient le publié procédure qui constitue le test, qui est ensuite suivie par le Démontage. Le programme d'installation peut être utilisé pour instancier des objets nécessaires à l'exécution de tests et d'initialiser leurs états, selon le test de fonctionnement. Le programme d'installation devrait également contenir des actions devait être effectuée avant chaque test est exécuté, comme une connexion à une base de données. Le démontage de la méthode doit être utilisée pour nettoyer et éliminer des objets.



publié de la procédure contient généralement plusieurs appels à la méthode de contrôle. La méthode de contrôle est déclaré comme suit:




procédure de Check(Condition: boolean msg: string = ') virtuel





Le paramètre condition est généralement sous la forme d'une expression, qui renvoie une valeur Booléenne. Si l'expression est passée dans la procédure de Vérification évalue à false, alors le test est marqué comme ayant échoué et l'exécution de l'épreuve est annulée.




...

Check(Prévu = Réels, 'nombre Réel différent de celui attendu')

...





Tests sont organisés en faisceaux, appelé suites. Des suites de Test peut contenir de multiples tests et d'autres des suites de test, fournissant ainsi un moyen de construire un arbre de tests. Centrale à DUnit des opérations est le test de registre, qui garde toutes les suites de l'application de test. Généralement, le test de registre est construit en une application de test de l'initialise. Les unités qui déclarent des cas de test par la convention ont une section initialisation où des cas de test sont créés et ajoutés à la base de registre.



suites de Test peuvent être créés par l'instanciation de la TTestSuite classe déclarée dans le TestFramework. Le plus pratique et souvent utilisé de façon à créer une suite de tests est d'utiliser la méthode de la Suite de TTestCase classe, ce qui crée un nouveau TTestSuite contenant uniquement les cas de test: notez que c'est une méthode de classe.



Le RegisterTest et RegisterTests procédures d'ajouter des tests ou des suites de test pour le test de registre. L'exemple le plus simple est de créer une suite de tests contenant un seul cas de test et puis de l'enregistrer comme suit:




Cadre.RegisterTest(TMyTest.Suite)





Comment exécuter des tests

DUnit comprend deux test standard coureur classes: TGUITestRunner interactive de l'interface graphique et TTextTestRunner avec mode batch interface de ligne de commande. TGUITestRunner est déclarée dans le GUITestRunner d'unité avec la RunRegisteredTests procédure autonome, qui gère le régime enregistré des suites de test à l'aide de TGUITestRunner. La CLX version de TGUITextRunner est déclarée dans le QGUITestRunner unité.



01.gif



TTextTestRunner est déclaré TextTestRunner unité avec le correspondant RunRegisteredTests procédure autonome. Les appels à RunRegisteredTest sont généralement qualifié avec un nom d'unité, car il y a plusieurs mondial RunRegisteredTests procédures, par exemple:




GUITestRunner.RunRegisteredTest





les utilisateurs Existants de DUnit remarquerez que l'un des plus récents changements apportés à DUnit est l'ajout de RunRegisteredTests les méthodes de la classe et de la dépréciation de autonome RunRegisteredTests, depuis plusieurs procédures mondiales avec le même nom inutilement encombrer l'espace de nom. L'appel à RunRegisteredTests est maintenant recommandé d'être qualifié avec le test runner nom de la classe plutôt qu'un nom de l'unité:




TGUITestRunner.RunRegisteredTest





Un exemple

nous allons mettre tout cela en pratique. L'exemple d'application recueille des cotes de la manière que beaucoup de sites web offrent un moyen pour le taux de 'ce site'. Plus particulièrement, CodeCentral a un intéressant système de notation où vous pouvez définir des choix en fonction de vos préférences personnelles (ma préférée est la Mythologie grecque). La logique de base de notre système d'évaluation est définie par la IRateCollector interface.




IRatingCollector = interface

& nbsp & nbsp fonction GetPrompt: string

& nbsp & nbsp procédure de Taux(de l'Évaluateur: string Choix: integer)

& nbsp & nbsp fonction GetChoiceCount: integer

& nbsp & nbsp fonction GetChoice(Choix: integer): string

& nbsp & nbsp fonction GetChoiceRatings(Choix: integer): integer

& nbsp & nbsp fonction GetRatingCount: integer

& nbsp & nbsp fonction GetRating(Indice: entier var Évaluateur: string): entier

& nbsp & nbsp fonction GetRatersRating(Évaluateur: string): entier

fin





Le TRateTests classe nous permet de développer et de tester la logique métier de façon indépendante à partir de l'élaboration de l'interface utilisateur. C'est en fait avantageux de développer et de tester la logique d'entreprise avant le démarrage de l'interface utilisateur. Les cas de tests sont conçus pour tester la mise en œuvre des IRatingCollector.




TRateTests = classe(TTestCase)

private

& nbsp & nbsp FRateCollector: IRatingCollector

protected

& nbsp & nbsp procédure d'Installation de remplacer

& nbsp & nbsp procédure de Démontage remplacer

publié

& nbsp & nbsp // tests ici

fin





L'Installation et le Démontage sont les procédures utilisées pour instancier et de disposer d'une mise en œuvre de la IRatingCollector.




const

& nbsp & nbsp SAMPLE_RATE_PROMPT = 'Taux DUnit (Mythologie Slave Féminin),'

& nbsp & nbsp SAMPLE_RATE_CHOICES: array[0..3] of string = ('Lada', 'Jurata', 'Marzanna', 'Baba Jaga')



procédure TRateTests.Le programme d'installation

begin

& nbsp & nbsp // modifier cette ligne pour tester une autre mise en œuvre de IRatingCollector

& nbsp & nbsp FRateCollector := TSimpleRatingCollector.Créer(SAMPLE_RATE_PROMPT, SAMPLE_RATE_CHOICES)

fin



procédure TRateTests.Démontage

begin

& nbsp & nbsp FRateCollector := nil

fin





Procédures déclarées lors de la publication de l'article sont à la base de test des unités de l'écriture, ce qui exige de l'inventivité et de la créativité. Dans notre exemple, TestChoices vérifie si la liste de choix est comme prévu.




procédure TRateTests.TestChoices

var

& nbsp & nbsp I: integer

begin

& nbsp & nbsp Vérifier(FRatingCollector.GetChoiceCount = Longueur(SAMPLE_RATE_CHOICES),

& ! & ! & ! & ! & nbsp Format ('Il doit être exactement %choix d',

& ! & ! & ! & ! & ! & ! & ! & nbsp Longueur(SAMPLE_RATE_CHOICES)]))

& nbsp & nbsp for I := 0 to FRatingCollector.GetChoiceCount - 1 do

& ! & ! & ! & nbsp Vérifier(FRatingCollector.GetChoice(I) = SAMPLE_RATE_CHOICES[I],

& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Attend SAMPLE_RATE_CHOICES[I])

fin





Le TestRate procédure vérifie si l'exécution de la procédure des Taux de résultats en augmentant le nombre de taux pour l'nominale choix:




Procédure TestRate

...

& nbsp & nbsp FRatingCollector.Taux(NextRater, 0)

& nbsp & nbsp Vérifier(FRatingCollector.GetRatingCount = RatingCount 1,

& ! & ! & ! & ! & ! & nbsp Attend IntToStr(RatingCount 1))

...

fin





Tests devraient être aussi complets que possible, mais il est très difficile de couvrir tous les scénarios possibles. Alors que les bugs sont signalés, les essais devraient être révisées.



Il est très important que les tests de couverture pour les conditions extrêmes dans notre exemple, le choix ou l'évaluateur passé à la procédure des Taux peut-être pas valide. Les tests de vérifier si une exception est levée lorsqu'une exception est prévue. Le code suivant vérifie si EinvalidRater exception est déclenchée lorsqu'un évaluateur tente de taux seconde fois.




ErrorAsExpected := false

de l'Évaluateur := NextRater



& nbsp & nbsp FRatingCollector.Taux(d'Objectivité, 0)

& nbsp & nbsp FRatingCollector.Taux(d'Objectivité, 0)

sauf

& nbsp & nbsp // exception prévue

& nbsp & nbsp E:EInvalidRater ne

& ! & ! & ! & nbsp ErrorAsExpected := true

fin

Check(ErrorAsExpected, 'Exception prévue si un évaluateur a déjà classé')





Enfin, l'inscription de l'épreuve dans la section initialisation:




RegisterTest('tests de Base', [TRateTests.Suite])





Le fichier de projet illustre la manière typique de l'exécution des tests en mode graphique.




GUITestRunner.runRegisteredTests





02.gif



l'utilisation De CLX plutôt que de la VCL, remplacer GUITestRunner avec QGUITestRunner dans des appels à runRegisteredTests ainsi que dans la clause uses.



La croix-plate-forme de programmation

Lors du portage de DUnit de Kylix, il y a deux catégories de problèmes, la différence entre Windows et Linux, les appels système et les différences entre la VCL et CLX. Étonnamment, couvrant les OS des différences est plus facile. La première étape est de mettre des instructions conditionnelles dans la clause uses, des unités comme les Fenêtres ou les Messages ne sont pas disponibles dans Kylix prototypes de système de base, les appels peuvent être trouvés dans la libc, l'unité de base et des définitions de type de le type et le standard de Qt unités. Certaines fonctions du système ont été remplacés par des équivalents Linux, d'autres doivent être mises en œuvre.



Il a pris un certain nombre de tours du port, CLX. CLX et VCL composants visuels ne sont que légèrement différentes, mais malgré cela, parfois, le portage peut être assez difficile.



DUnit pour Delphi et Kylix compile à partir de la même source, à l'exception de GUITestRunner/QGUITestRunner GUI les coureurs de l'épreuve, il y a cependant beaucoup de conditionnel dans la source pour permettre à cette croix plate-forme de soutien.



C'est juste le début

une Fois les bases maîtrisées, il y a beaucoup de fonctionnalités supplémentaires dans DUnit qui permettent aux plus complexes, des tests à effectuer. Par exemple, il est prêt à l'emploi classes qui peuvent être utilisées à des fins spécifiques, telles que les essais pour une fuite de mémoire. Le TestExtension unité contient un certain nombre de classes basées sur le modèle Décorateur. L'un des plus importants est TRepeatedTest classe, ce qui vous permet d'exécuter les cas de test d'un nombre donné de fois. Dans cet exemple, TRepeatedTest est utilisée pour appeler le Taux procédure plusieurs fois de suite.




RegisterTest (Répétées des Taux',

& nbsp & nbsp TRepeatedTest.Créer(TRateTests.Create('CheckRate'), 5))





La classe TGUITestCase, prend en charge le test de l'interface graphique. TGUITestCase est déclarée dans le GUITesting unité. Voir RateGUITests unité pour un exemple d'utilisation pour tester la boîte de dialogue de soumettre la notation.



Comme source Delphi pour DUnit est disponible gratuitement, ainsi une expérience développeur Delphi peut facilement s'étendre DUnit, par exemple par la création de nouvelles extensions.



Tests comme libéré d'art

Test donne de meilleurs résultats si les tests sont basés sur la connaissance de la conception de l'application. Si les diagrammes UML ont été créés, ils peuvent être utilisés comme une base pour la construction de tests, complétant ainsi l'exigence, l'analyse, la mise en œuvre, le cycle d'essai.



Idéalement, les tests devraient être développés en même temps que l'élaboration du projet de code. Techniquement, les tests peuvent être créés pour les applications qui sont déjà complètes, cependant, ces applications sont souvent pas adapté pour les tests unitaires car ils n'ont pas développé une structure modulaire. À l'aide de tests automatisés avec DUnit favorise une meilleure conception de l'application ainsi que rendre plus facile à refactoriser le code, mais je pense que la plus grande différence qu'il fait est à l'étape de la maintenance de l'application. Les responsables peuvent être affectés à des unités (dans le sens de modules) plutôt que de réaliser des projets et ils peuvent correction de bug et des unités de test sans de construire et de tester un ensemble de l'application. Parfois, un problème peut être résolu au niveau de l'unité et de l'implication d'un développeur expérimenté est nécessaire, mais dans le cas d'un grand amorphic application, les développeurs expérimentés interviennent tout le temps.


& nbsp







Les tests automatises avec dunit


Les tests automatises avec dunit : Plusieurs milliers de conseils pour vous faciliter la vie.


erreur est humaine - automatique de test de code Delphi avec DUnit. Par Kris Golko



Pour introduire des bogues est humaine, le probleme est generalement pas avec les corriger, mais avec de les trouver avant que vos clients ne. Automatise, outils de tests de venir a la rescousse ici, avec leur capacite a repeter la procedure de test sans relache, afin que les developpeurs peuvent travailler avec beaucoup plus de confiance. Pourquoi choisir DUnit? Parce que c'est sur les tests unitaires (unit dans le sens de la construction d'un bloc de code plutot que d'un Objet Pascal unite). Un autre avantage est que DUnit tests sont des cadres de travail pour executer du code, qui est plus rapide et plus pratique que l'execution d'une application complete. Ce que j'aime le plus dans DUnit, c'est que je peux creer mon cas de test avec mon prefere outil de developpement. DUnit supporte Delphi 4 a 7 ainsi que Kylix.



prise en main

DUnit est distribue sous forme de code source, il comprend un certain nombre de Delphi fichiers source, des exemples et de la documentation. Il peut etre telecharge depuis la page web du projet sur SourceForge sourceforge.net:/projets/dunit. Pour l'installer, il suffit de dezipper le fichier dans un repertoire de votre choix, en preservant les sous-repertoires. Les unites utilisees pour creer et executer des tests sont dans le repertoire 'src' sous-repertoire qui doit etre ajoute a la Bibliotheque de Chemin d'acces dans 'Options de l'Environnement|de la Bibliotheque', ou le Chemin de Recherche de Projet|Options dans votre projet de test.



Comment ecrire des cas de test

C'est facile: tout ce que vous avez a faire est de creer une classe heritee de TTestCase, TTestCase est declaree dans le TestFramework unite. Pour ajouter des tests a une classe de cas de test, il suffit d'ajouter un publie procedure pour chaque test de votre classe derivee. Un test runner objet utilise RTTI pour detecter quels sont les tests disponibles dans une classe de cas de test.



Il y a deux methodes utiles: l'Installation et le Demontage. L'execution de chaque cas de test au sein d'une classe commence avec le programme d'Installation, puis vient le publie procedure qui constitue le test, qui est ensuite suivie par le Demontage. Le programme d'installation peut etre utilise pour instancier des objets necessaires a l'execution de tests et d'initialiser leurs etats, selon le test de fonctionnement. Le programme d'installation devrait egalement contenir des actions devait etre effectuee avant chaque test est execute, comme une connexion a une base de donnees. Le demontage de la methode doit etre utilisee pour nettoyer et eliminer des objets.



publie de la procedure contient generalement plusieurs appels a la methode de controle. La methode de controle est declare comme suit:




procedure de Check(Condition: boolean msg: string = ') virtuel





Le parametre condition est generalement sous la forme d'une expression, qui renvoie une valeur Booleenne. Si l'expression est passee dans la procedure de Verification evalue a false, alors le test est marque comme ayant echoue et l'execution de l'epreuve est annulee.




...

Check(Prevu = Reels, 'nombre Reel different de celui attendu')

...





Tests sont organises en faisceaux, appele suites. Des suites de Test peut contenir de multiples tests et d'autres des suites de test, fournissant ainsi un moyen de construire un arbre de tests. Centrale a DUnit des operations est le test de registre, qui garde toutes les suites de l'application de test. Generalement, le test de registre est construit en une application de test de l'initialise. Les unites qui declarent des cas de test par la convention ont une section initialisation ou des cas de test sont crees et ajoutes a la base de registre.



suites de Test peuvent etre crees par l'instanciation de la TTestSuite classe declaree dans le TestFramework. Le plus pratique et souvent utilise de façon a creer une suite de tests est d'utiliser la methode de la Suite de TTestCase classe, ce qui cree un nouveau TTestSuite contenant uniquement les cas de test: notez que c'est une methode de classe.



Le RegisterTest et RegisterTests procedures d'ajouter des tests ou des suites de test pour le test de registre. L'exemple le plus simple est de creer une suite de tests contenant un seul cas de test et puis de l'enregistrer comme suit:




Cadre.RegisterTest(TMyTest.Suite)





Comment executer des tests

DUnit comprend deux test standard coureur classes: TGUITestRunner interactive de l'interface graphique et TTextTestRunner avec mode batch interface de ligne de commande. TGUITestRunner est declaree dans le GUITestRunner d'unite avec la RunRegisteredTests procedure autonome, qui gere le regime enregistre des suites de test a l'aide de TGUITestRunner. La CLX version de TGUITextRunner est declaree dans le QGUITestRunner unite.



01.gif



TTextTestRunner est declare TextTestRunner unite avec le correspondant RunRegisteredTests procedure autonome. Les appels a RunRegisteredTest sont generalement qualifie avec un nom d'unite, car il y a plusieurs mondial RunRegisteredTests procedures, par exemple:




GUITestRunner.RunRegisteredTest





les utilisateurs Existants de DUnit remarquerez que l'un des plus recents changements apportes a DUnit est l'ajout de RunRegisteredTests les methodes de la classe et de la depreciation de autonome RunRegisteredTests, depuis plusieurs procedures mondiales avec le meme nom inutilement encombrer l'espace de nom. L'appel a RunRegisteredTests est maintenant recommande d'etre qualifie avec le test runner nom de la classe plutot qu'un nom de l'unite:




TGUITestRunner.RunRegisteredTest





Un exemple

nous allons mettre tout cela en pratique. L'exemple d'application recueille des cotes de la maniere que beaucoup de sites web offrent un moyen pour le taux de 'ce site'. Plus particulierement, CodeCentral a un interessant systeme de notation ou vous pouvez definir des choix en fonction de vos preferences personnelles (ma preferee est la Mythologie grecque). La logique de base de notre systeme d'evaluation est definie par la IRateCollector interface.




IRatingCollector = interface

& nbsp & nbsp fonction GetPrompt: string

& nbsp & nbsp procedure de Taux(de l'Evaluateur: string Choix: integer)

& nbsp & nbsp fonction GetChoiceCount: integer

& nbsp & nbsp fonction GetChoice(Choix: integer): string

& nbsp & nbsp fonction GetChoiceRatings(Choix: integer): integer

& nbsp & nbsp fonction GetRatingCount: integer

& nbsp & nbsp fonction GetRating(Indice: entier var Evaluateur: string): entier

& nbsp & nbsp fonction GetRatersRating(Evaluateur: string): entier

fin





Le TRateTests classe nous permet de developper et de tester la logique metier de façon independante a partir de l'elaboration de l'interface utilisateur. C'est en fait avantageux de developper et de tester la logique d'entreprise avant le demarrage de l'interface utilisateur. Les cas de tests sont conçus pour tester la mise en œuvre des IRatingCollector.




TRateTests = classe(TTestCase)

private

& nbsp & nbsp FRateCollector: IRatingCollector

protected

& nbsp & nbsp procedure d'Installation de remplacer

& nbsp & nbsp procedure de Demontage remplacer

publie

& nbsp & nbsp // tests ici

fin





L'Installation et le Demontage sont les procedures utilisees pour instancier et de disposer d'une mise en œuvre de la IRatingCollector.




const

& nbsp & nbsp SAMPLE_RATE_PROMPT = 'Taux DUnit (Mythologie Slave Feminin),'

& nbsp & nbsp SAMPLE_RATE_CHOICES: array[0..3] of string = ('Lada', 'Jurata', 'Marzanna', 'Baba Jaga')



procedure TRateTests.Le programme d'installation

begin

& nbsp & nbsp // modifier cette ligne pour tester une autre mise en œuvre de IRatingCollector

& nbsp & nbsp FRateCollector := TSimpleRatingCollector.Creer(SAMPLE_RATE_PROMPT, SAMPLE_RATE_CHOICES)

fin



procedure TRateTests.Demontage

begin

& nbsp & nbsp FRateCollector := nil

fin





Procedures declarees lors de la publication de l'article sont a la base de test des unites de l'ecriture, ce qui exige de l'inventivite et de la creativite. Dans notre exemple, TestChoices verifie si la liste de choix est comme prevu.




procedure TRateTests.TestChoices

var

& nbsp & nbsp I: integer

begin

& nbsp & nbsp Verifier(FRatingCollector.GetChoiceCount = Longueur(SAMPLE_RATE_CHOICES),

& ! & ! & ! & ! & nbsp Format ('Il doit etre exactement %choix d',

& ! & ! & ! & ! & ! & ! & ! & nbsp Longueur(SAMPLE_RATE_CHOICES)]))

& nbsp & nbsp for I := 0 to FRatingCollector.GetChoiceCount - 1 do

& ! & ! & ! & nbsp Verifier(FRatingCollector.GetChoice(I) = SAMPLE_RATE_CHOICES[I],

& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Attend SAMPLE_RATE_CHOICES[I])

fin





Le TestRate procedure verifie si l'execution de la procedure des Taux de resultats en augmentant le nombre de taux pour l'nominale choix:




Procedure TestRate

...

& nbsp & nbsp FRatingCollector.Taux(NextRater, 0)

& nbsp & nbsp Verifier(FRatingCollector.GetRatingCount = RatingCount 1,

& ! & ! & ! & ! & ! & nbsp Attend IntToStr(RatingCount 1))

...

fin





Tests devraient etre aussi complets que possible, mais il est tres difficile de couvrir tous les scenarios possibles. Alors que les bugs sont signales, les essais devraient etre revisees.



Il est tres important que les tests de couverture pour les conditions extremes dans notre exemple, le choix ou l'evaluateur passe a la procedure des Taux peut-etre pas valide. Les tests de verifier si une exception est levee lorsqu'une exception est prevue. Le code suivant verifie si EinvalidRater exception est declenchee lorsqu'un evaluateur tente de taux seconde fois.




ErrorAsExpected := false

de l'Evaluateur := NextRater



& nbsp & nbsp FRatingCollector.Taux(d'Objectivite, 0)

& nbsp & nbsp FRatingCollector.Taux(d'Objectivite, 0)

sauf

& nbsp & nbsp // exception prevue

& nbsp & nbsp E:EInvalidRater ne

& ! & ! & ! & nbsp ErrorAsExpected := true

fin

Check(ErrorAsExpected, 'Exception prevue si un evaluateur a deja classe')





Enfin, l'inscription de l'epreuve dans la section initialisation:




RegisterTest('tests de Base', [TRateTests.Suite])





Le fichier de projet illustre la maniere typique de l'execution des tests en mode graphique.




GUITestRunner.runRegisteredTests





02.gif



l'utilisation De CLX plutot que de la VCL, remplacer GUITestRunner avec QGUITestRunner dans des appels a runRegisteredTests ainsi que dans la clause uses.



La croix-plate-forme de programmation

Lors du portage de DUnit de Kylix, il y a deux categories de problemes, la difference entre Windows et Linux, les appels systeme et les differences entre la VCL et CLX. Etonnamment, couvrant les OS des differences est plus facile. La premiere etape est de mettre des instructions conditionnelles dans la clause uses, des unites comme les Fenetres ou les Messages ne sont pas disponibles dans Kylix prototypes de systeme de base, les appels peuvent etre trouves dans la libc, l'unite de base et des definitions de type de le type et le standard de Qt unites. Certaines fonctions du systeme ont ete remplaces par des equivalents Linux, d'autres doivent etre mises en œuvre.



Il a pris un certain nombre de tours du port, CLX. CLX et VCL composants visuels ne sont que legerement differentes, mais malgre cela, parfois, le portage peut etre assez difficile.



DUnit pour Delphi et Kylix compile a partir de la meme source, a l'exception de GUITestRunner/QGUITestRunner GUI les coureurs de l'epreuve, il y a cependant beaucoup de conditionnel dans la source pour permettre a cette croix plate-forme de soutien.



C'est juste le debut

une Fois les bases maîtrisees, il y a beaucoup de fonctionnalites supplementaires dans DUnit qui permettent aux plus complexes, des tests a effectuer. Par exemple, il est pret a l'emploi classes qui peuvent etre utilisees a des fins specifiques, telles que les essais pour une fuite de memoire. Le TestExtension unite contient un certain nombre de classes basees sur le modele Decorateur. L'un des plus importants est TRepeatedTest classe, ce qui vous permet d'executer les cas de test d'un nombre donne de fois. Dans cet exemple, TRepeatedTest est utilisee pour appeler le Taux procedure plusieurs fois de suite.




RegisterTest (Repetees des Taux',

& nbsp & nbsp TRepeatedTest.Creer(TRateTests.Create('CheckRate'), 5))





La classe TGUITestCase, prend en charge le test de l'interface graphique. TGUITestCase est declaree dans le GUITesting unite. Voir RateGUITests unite pour un exemple d'utilisation pour tester la boîte de dialogue de soumettre la notation.



Comme source Delphi pour DUnit est disponible gratuitement, ainsi une experience developpeur Delphi peut facilement s'etendre DUnit, par exemple par la creation de nouvelles extensions.



Tests comme libere d'art

Test donne de meilleurs resultats si les tests sont bases sur la connaissance de la conception de l'application. Si les diagrammes UML ont ete crees, ils peuvent etre utilises comme une base pour la construction de tests, completant ainsi l'exigence, l'analyse, la mise en œuvre, le cycle d'essai.



Idealement, les tests devraient etre developpes en meme temps que l'elaboration du projet de code. Techniquement, les tests peuvent etre crees pour les applications qui sont deja completes, cependant, ces applications sont souvent pas adapte pour les tests unitaires car ils n'ont pas developpe une structure modulaire. A l'aide de tests automatises avec DUnit favorise une meilleure conception de l'application ainsi que rendre plus facile a refactoriser le code, mais je pense que la plus grande difference qu'il fait est a l'etape de la maintenance de l'application. Les responsables peuvent etre affectes a des unites (dans le sens de modules) plutot que de realiser des projets et ils peuvent correction de bug et des unites de test sans de construire et de tester un ensemble de l'application. Parfois, un probleme peut etre resolu au niveau de l'unite et de l'implication d'un developpeur experimente est necessaire, mais dans le cas d'un grand amorphic application, les developpeurs experimentes interviennent tout le temps.


& nbsp

Les tests automatisés avec dunit

Les tests automatisés avec dunit : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation