Flex / ActionScript
  Tests Unitaires
     et TDD


     2012 - 06 - 14
Mathurin Body
(@mathurin_body)




Christophe Keromen
   (@ckeromen)
Mathurin Body
   (@mathurin_body)




   Christophe Keromen
      (@ckeromen)

en continuelle amélioration
Le Test Unitaire consiste à prendre
   la plus petite partie du code,
     isolée de tout autre facteur
 et à vérifier qu'elle se comporte
      comme vous l'attendez.


       Michael Labriola
Isolation
• Le résultat du test ne doit pas être affecté par
 • d'autres objets
 • l'état global
• Lors de l'échec d'un test unitaire, la source de
  l'erreur doit être immédiatement identifiable.
Le Test d'Intégration consiste à assembler des
 portions de code déjà testées unitairement et à
vérifier que le comportement et l'interaction entre
           ces composants est correct.
                                   Michael Labriola
Integration
  En règle générale, à partir du moment où
  l'on utilise l'un des termes suivants, nous
  sommes en train de discuter d'une forme de
  test d'intégration :
• Asynchronous
• Server
• Lifecycle
• DisplayList
Le Test Functionnel s'attache à enregistrer et
     rejouer les interactions avec l'application.
 Il est extrêmement important car il assure que
      l'application respecte les spécifications.
  Il se peut que de nombreuses unités de code
doivent fonctionner avant de pouvoir produire un
                seul test d'intégration.
                                   Michael Labriola
Flex Unit
Tests Unitaires et Flex / ActionScript 3




FlexUnit est fourni avec Flash Builder 4.6, implémente xUnit

FB 4.6 prend en charge les tests unitaires sur projets mobiles
(WiFi requis)
Interface Utilisateur ?
Interface Utilisateur ?

• Lorsque la Logique n'est pas couplée
  avec la Vue, la Logique peut être
  mise sous Test Unitaire.
Interface Utilisateur ?

• Lorsque la Logique n'est pas couplée
  avec la Vue, la Logique peut être
  mise sous Test Unitaire.

• Ex.: CalculatorAppFlex
Interface Utilisateur ?

• Lorsque la Logique n'est pas couplée
  avec la Vue, la Logique peut être
  mise sous Test Unitaire.

• Ex.: CalculatorAppFlex
  o les déclarations MMXL
    declarations et les Event Handlers
    ne sont pas mis sous test unitaires
Interface Utilisateur ?

• Lorsque la Logique n'est pas couplée
  avec la Vue, la Logique peut être
  mise sous Test Unitaire.

• Ex.: CalculatorAppFlex
  o les déclarations MMXL
    declarations et les Event Handlers
    ne sont pas mis sous test unitaires
  o CalculatorLogicHelper est
    couverte par les tests unitaires
Interface Utilisateur ?

• Lorsque la Logique n'est pas couplée
  avec la Vue, la Logique peut être
  mise sous Test Unitaire.

• Ex.: CalculatorAppFlex
  o les déclarations MMXL
    declarations et les Event Handlers
    ne sont pas mis sous test unitaires
  o CalculatorLogicHelper est
    couverte par les tests unitaires
Interface Utilisateur ?



Le test des composants UI est beaucoup plus complexe, ex.:

FlexUnit4Examples/flexUnitTests.FlexUnit4CheckUITester
http://www.slideshare.net/anupom98/introduction-to-tdd-with-flexunit
http://www.slideshare.net/anupom98/introduction-to-tdd-with-flexunit
Flex UnitTesting Demo



       MobileCalc
Raccourcis Flash Builder:

• Alt+Shift+A, F

Exécute tous les tests FlexUnit du projet.

• Alt+Shift+E, F

Exécute les tests FlexUnit sélectionnés.

• Tag [Ignore] - Permet d'ignorer le test marqué. Évite de
  commenter la méthode.
http://www.slideshare.net/anupom98/introduction-to-tdd-with-flexunit
TDD
eXtreme Unit Testing
TDD
   eXtreme Unit Testing




Écrivez les tests en premier !
TDD
   eXtreme Unit Testing




Écrivez les tests en premier !
     AVANT DE CODER
Combien ont déjà fait du TDD ?

Combien ont essayé de faire du TDD et
abandonné ?

Combien ont toujours rêvé de se mettre au TDD,
mais ne l'ont pas fait ?
http://www.slideshare.net/anupom98/introduction-to-tdd-with-flexunit
Quels tests ?
Quels tests ?




        • Première étape

       Comprendre les exigences métiers

       Penser aux différents scenarios possibles

       Ajouter des tests reposant sur ces scenarios
Quels tests ?



          • Le Test passe



          Une fois que vous avez écrit tout le code et
          que tous les tests passent, vous savez que
          vous remplissez toutes les exigences métiers.
          Vous pouvez partager le résultat avec le client
          ou les autres membres de l'équipe.
Quels tests ?




       • Bug fix



       Chaque résolution de bogue devrait commencer par
       l'écriture d'un test unitaire qui le met en évidence.
TDD - Demo
CalculatorLogicHelper
Workflow
Workflow
Workflow
Workflow
Workflow
• Lister les exigences
Workflow
• Lister les exigences
• Créer la Classe
Workflow
• Lister les exigences
• Créer la Classe
• Créer le TestCase à partir de la Classe : New Test
  Case Class + Select class to test
Workflow
• Lister les exigences
• Créer la Classe
• Créer le TestCase à partir de la Classe : New Test
  Case Class + Select class to test
• Run Test -> échec
Workflow
• Lister les exigences
• Créer la Classe
• Créer le TestCase à partir de la Classe : New Test
  Case Class + Select class to test
• Run Test -> échec
• Écrire du code pour passer le test
Workflow
• Lister les exigences
• Créer la Classe
• Créer le TestCase à partir de la Classe : New Test
  Case Class + Select class to test
• Run Test -> échec
• Écrire du code pour passer le test
• Refactoring si nécessaire
Workflow
• Lister les exigences
• Créer la Classe
• Créer le TestCase à partir de la Classe : New Test
  Case Class + Select class to test
• Run Test -> échec
• Écrire du code pour passer le test
• Refactoring si nécessaire
• Création d'une TestSuite : New Test Suite Class +
  select Test classes
Elad Elrom conseille :
Elad Elrom conseille :


• De ne pas utiliser TDD pour les gestuelles.
Elad Elrom conseille :


• De ne pas utiliser TDD pour les gestuelles.

• D'éviter généralement d'utiliser TDD pour tester l'interface
  utilisateur.
Elad Elrom conseille :


• De ne pas utiliser TDD pour les gestuelles.

• D'éviter généralement d'utiliser TDD pour tester l'interface
  utilisateur.

• D'utiliser TDD pour construire les APIs, frameworks,
  utilitaires et helpers.
Elad Elrom conseille :


• De ne pas utiliser TDD pour les gestuelles.

• D'éviter généralement d'utiliser TDD pour tester l'interface
  utilisateur.

• D'utiliser TDD pour construire les APIs, frameworks,
  utilitaires et helpers.

• D'utiliser TDD pour tester les services.
Elad Elrom conseille :


• De ne pas utiliser TDD pour les gestuelles.

• D'éviter généralement d'utiliser TDD pour tester l'interface
  utilisateur.

• D'utiliser TDD pour construire les APIs, frameworks,
  utilitaires et helpers.

• D'utiliser TDD pour tester les services.

• D'utiliser TDD pour le code qui sera utilisé plus d'une fois,
  dans plus d'une application,…
Bibliography

• http://www.slideshare.net/anupom98/introduction-to-tdd-with-flexunit

• Unit Testing Tools in Flash Builder: http://help.adobe.com/en_US/flashbuilder/
  using/WS064a3073e805330f-57274fcd12dfe5a574a-8000.html

• Doc FlexUnit: http://docs.flexunit.org/index.php

• Elad Elrom
   o Test Driven Development using Flash Builder 4 and FlexUnit (2009) http://
     www.adobe.com/devnet/flex/articles/flashbuilder4_tdd.html
   o http://www.slideshare.net/eladnyc/test-driven-development-tdd-with-
     flexunit-4-360flex-san-jose-preso
   o http://elromdesign.com/blog/2010/03/10/test-driven-development-tdd-with-
     flexunit-4-complete-tutorial/
Ressources

• http://www.slideshare.et/michael.labriola/why-test-with-flex-
  unit

• http://tutorials.digitalprimates.net/flexunit.html

• Support for FlexUnit: https://flexunit.tenderapp.com/

• A very good read http://www.amazon.com/Working-
  Effectively-Legacy-Michael- Feathers/dp/0131177052

 • Elad Elrom Examples Download
http://www.adobe.com/content/dotcom/en/devnet/flex/articles/
flashbuilder4_tdd/_jcr_content/articlePrerequistes/multiplefiles/
node_1278642616618/file.res/flashbuilder4_tdd_source[1].zip
Bibliographie




     Chapter 2 of AdvancedED Flex 4




               Flash&Flex Developer's Magazine
            Flash and mobile - APPS, IPHONE AND
                         IPOD Touch
                            201-01

Flex Unit Testing

  • 1.
    Flex / ActionScript Tests Unitaires et TDD 2012 - 06 - 14
  • 2.
  • 3.
    Mathurin Body (@mathurin_body) Christophe Keromen (@ckeromen) en continuelle amélioration
  • 5.
    Le Test Unitaireconsiste à prendre la plus petite partie du code, isolée de tout autre facteur et à vérifier qu'elle se comporte comme vous l'attendez. Michael Labriola
  • 6.
    Isolation • Le résultatdu test ne doit pas être affecté par • d'autres objets • l'état global • Lors de l'échec d'un test unitaire, la source de l'erreur doit être immédiatement identifiable.
  • 7.
    Le Test d'Intégrationconsiste à assembler des portions de code déjà testées unitairement et à vérifier que le comportement et l'interaction entre ces composants est correct. Michael Labriola
  • 8.
    Integration Enrègle générale, à partir du moment où l'on utilise l'un des termes suivants, nous sommes en train de discuter d'une forme de test d'intégration : • Asynchronous • Server • Lifecycle • DisplayList
  • 9.
    Le Test Functionnels'attache à enregistrer et rejouer les interactions avec l'application. Il est extrêmement important car il assure que l'application respecte les spécifications. Il se peut que de nombreuses unités de code doivent fonctionner avant de pouvoir produire un seul test d'intégration. Michael Labriola
  • 10.
  • 11.
    Tests Unitaires etFlex / ActionScript 3 FlexUnit est fourni avec Flash Builder 4.6, implémente xUnit FB 4.6 prend en charge les tests unitaires sur projets mobiles (WiFi requis)
  • 12.
  • 13.
    Interface Utilisateur ? •Lorsque la Logique n'est pas couplée avec la Vue, la Logique peut être mise sous Test Unitaire.
  • 14.
    Interface Utilisateur ? •Lorsque la Logique n'est pas couplée avec la Vue, la Logique peut être mise sous Test Unitaire. • Ex.: CalculatorAppFlex
  • 15.
    Interface Utilisateur ? •Lorsque la Logique n'est pas couplée avec la Vue, la Logique peut être mise sous Test Unitaire. • Ex.: CalculatorAppFlex o les déclarations MMXL declarations et les Event Handlers ne sont pas mis sous test unitaires
  • 16.
    Interface Utilisateur ? •Lorsque la Logique n'est pas couplée avec la Vue, la Logique peut être mise sous Test Unitaire. • Ex.: CalculatorAppFlex o les déclarations MMXL declarations et les Event Handlers ne sont pas mis sous test unitaires o CalculatorLogicHelper est couverte par les tests unitaires
  • 17.
    Interface Utilisateur ? •Lorsque la Logique n'est pas couplée avec la Vue, la Logique peut être mise sous Test Unitaire. • Ex.: CalculatorAppFlex o les déclarations MMXL declarations et les Event Handlers ne sont pas mis sous test unitaires o CalculatorLogicHelper est couverte par les tests unitaires
  • 18.
    Interface Utilisateur ? Letest des composants UI est beaucoup plus complexe, ex.: FlexUnit4Examples/flexUnitTests.FlexUnit4CheckUITester
  • 19.
  • 21.
  • 22.
  • 24.
    Raccourcis Flash Builder: •Alt+Shift+A, F Exécute tous les tests FlexUnit du projet. • Alt+Shift+E, F Exécute les tests FlexUnit sélectionnés. • Tag [Ignore] - Permet d'ignorer le test marqué. Évite de commenter la méthode.
  • 25.
  • 26.
  • 27.
    TDD eXtreme Unit Testing Écrivez les tests en premier !
  • 28.
    TDD eXtreme Unit Testing Écrivez les tests en premier ! AVANT DE CODER
  • 30.
    Combien ont déjàfait du TDD ? Combien ont essayé de faire du TDD et abandonné ? Combien ont toujours rêvé de se mettre au TDD, mais ne l'ont pas fait ?
  • 31.
  • 32.
  • 33.
    Quels tests ? • Première étape Comprendre les exigences métiers Penser aux différents scenarios possibles Ajouter des tests reposant sur ces scenarios
  • 34.
    Quels tests ? • Le Test passe Une fois que vous avez écrit tout le code et que tous les tests passent, vous savez que vous remplissez toutes les exigences métiers. Vous pouvez partager le résultat avec le client ou les autres membres de l'équipe.
  • 35.
    Quels tests ? • Bug fix Chaque résolution de bogue devrait commencer par l'écriture d'un test unitaire qui le met en évidence.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
    Workflow • Lister lesexigences • Créer la Classe
  • 43.
    Workflow • Lister lesexigences • Créer la Classe • Créer le TestCase à partir de la Classe : New Test Case Class + Select class to test
  • 44.
    Workflow • Lister lesexigences • Créer la Classe • Créer le TestCase à partir de la Classe : New Test Case Class + Select class to test • Run Test -> échec
  • 45.
    Workflow • Lister lesexigences • Créer la Classe • Créer le TestCase à partir de la Classe : New Test Case Class + Select class to test • Run Test -> échec • Écrire du code pour passer le test
  • 46.
    Workflow • Lister lesexigences • Créer la Classe • Créer le TestCase à partir de la Classe : New Test Case Class + Select class to test • Run Test -> échec • Écrire du code pour passer le test • Refactoring si nécessaire
  • 47.
    Workflow • Lister lesexigences • Créer la Classe • Créer le TestCase à partir de la Classe : New Test Case Class + Select class to test • Run Test -> échec • Écrire du code pour passer le test • Refactoring si nécessaire • Création d'une TestSuite : New Test Suite Class + select Test classes
  • 48.
  • 49.
    Elad Elrom conseille: • De ne pas utiliser TDD pour les gestuelles.
  • 50.
    Elad Elrom conseille: • De ne pas utiliser TDD pour les gestuelles. • D'éviter généralement d'utiliser TDD pour tester l'interface utilisateur.
  • 51.
    Elad Elrom conseille: • De ne pas utiliser TDD pour les gestuelles. • D'éviter généralement d'utiliser TDD pour tester l'interface utilisateur. • D'utiliser TDD pour construire les APIs, frameworks, utilitaires et helpers.
  • 52.
    Elad Elrom conseille: • De ne pas utiliser TDD pour les gestuelles. • D'éviter généralement d'utiliser TDD pour tester l'interface utilisateur. • D'utiliser TDD pour construire les APIs, frameworks, utilitaires et helpers. • D'utiliser TDD pour tester les services.
  • 53.
    Elad Elrom conseille: • De ne pas utiliser TDD pour les gestuelles. • D'éviter généralement d'utiliser TDD pour tester l'interface utilisateur. • D'utiliser TDD pour construire les APIs, frameworks, utilitaires et helpers. • D'utiliser TDD pour tester les services. • D'utiliser TDD pour le code qui sera utilisé plus d'une fois, dans plus d'une application,…
  • 54.
    Bibliography • http://www.slideshare.net/anupom98/introduction-to-tdd-with-flexunit • UnitTesting Tools in Flash Builder: http://help.adobe.com/en_US/flashbuilder/ using/WS064a3073e805330f-57274fcd12dfe5a574a-8000.html • Doc FlexUnit: http://docs.flexunit.org/index.php • Elad Elrom o Test Driven Development using Flash Builder 4 and FlexUnit (2009) http:// www.adobe.com/devnet/flex/articles/flashbuilder4_tdd.html o http://www.slideshare.net/eladnyc/test-driven-development-tdd-with- flexunit-4-360flex-san-jose-preso o http://elromdesign.com/blog/2010/03/10/test-driven-development-tdd-with- flexunit-4-complete-tutorial/
  • 55.
    Ressources • http://www.slideshare.et/michael.labriola/why-test-with-flex- unit • http://tutorials.digitalprimates.net/flexunit.html • Support for FlexUnit: https://flexunit.tenderapp.com/ • A very good read http://www.amazon.com/Working- Effectively-Legacy-Michael- Feathers/dp/0131177052 • Elad Elrom Examples Download http://www.adobe.com/content/dotcom/en/devnet/flex/articles/ flashbuilder4_tdd/_jcr_content/articlePrerequistes/multiplefiles/ node_1278642616618/file.res/flashbuilder4_tdd_source[1].zip
  • 56.
    Bibliographie Chapter 2 of AdvancedED Flex 4 Flash&Flex Developer's Magazine Flash and mobile - APPS, IPHONE AND IPOD Touch 201-01