SlideShare une entreprise Scribd logo
CocoaHeads Rennes
                           Quentin Arnault
  13 octobre 2011




     Tests automatisés sur iOS
Pourquoi ?

                                            Tests de bout
                                               en bout
             Comment ?
               xUnit



                         Tests unitaires
                         et d’intégration
Quels sont nos objectifs ?
Livrer nos produits !
Ecrire du code
  adaptable          Y prendre du
                 1      plaisir
          2             3
Livrer nos produits !
➡      Aide à la         ➡ Tests plus rapide
    compréhension
                         ➡ Isoler et valider
    Non régression         une anomalie
➡
                     1
Ecrire du code
  adaptable
                 ➡ Composants indépendants

          2      ➡     Harnais de tests
Y prendre du
                       plaisir
➡   Esprit serein
                       3
xUnit
➡ Créé par Kent Beck et Erich Gamma
➡ Disponible sur un nombre important de plateformes
➡ Principes :
➡ Environnement simple
➡ Exécution des tests à la chaine
➡ Compte rendu du résultat de l’exécution des tests
Vocabulaire
➡   Assertion : prédicat attendu lors de l’exécution du test

➡   Test : méthode effectuant un test

➡   Test Case : classe regroupant un ensemble de Tests

➡   Test Suite : enchaînement de Test Case

➡   Fixture : contexte dans lequel un Test se déroule

➡   SUT : le système que l’on teste
La boucle principale

                 setUp

          test_should_reset

              tearDown

  Pour chaque méthode test… d’une classe

                    Pour chaque classe de test
Démo
OCUnit

➡   Une implémentation de xUnit

➡   Répond aux besoins de tests unitaires

➡   Plus d’excuse, c’est INTÉGRÉ !



➡   Mais manque de maturité
GHUnit

➡   Une implémentation de xUnit

➡   Plus riche (tests asynchrones)

➡   Exécution de tests individuellement



➡   Mais plus lourd à la création du projet
Démo
OCUnit Vs GHUnit

        OCUnit                      GHUnit

                                    Possibilité de (re)lancer chaque
                                    test

  +     Intégration                 Compatible OCUnit
                                    Macros plus riches




  -
        Lisibilité des logs
                                    Installation
        Utilisable depuis Xcode 4
Pour vous aider



  OCMock
Base de données
Arrange


   Act    SUT    Webservices


 Assert
                Librairie tierce
mock
Arrange


   Act    SUT   mock


 Assert
                mock
Deux phases

id mockLine = [OCMockObject mockForClass:[Line class]];



[[mockLine expect] mergeResponse];         Enregistrement du contrat


...                                         Enregistrement des messages

[mockLine verify];
Démo
Vous leur direz merci

➡   Mise en place simplifiée

➡   Réduit le couplage

➡   Exécution des tests plus rapide

➡   Met en valeur les collaborations entre objets
➡   Peut masquer un problème
    d’intégration



➡   A coupler avec des tests
    d’intégration
Les tests d’UI
                    Testent la totalité de l’application

C’est un peu (beaucoup) ennuyeux

                            Facile d’oublier des tests

Ce que les utilisateurs voient en premier
UIAutomation proposé par Apple avec iOS 4.0




                         +
Sonde pour Instruments       Librairie JavaScript
1. Basé sur les informations d’accessibilités



2. Tests écrits dans un fichier JavaScript



3. Tests exécutés avec Instruments
lockScreen
                                    orientationChange
doubleTap
                       flickInside
      background
                                      dragInside

         twoFingerTap
tap                                  touchAndHold
Démo
Il reste des limitations


➡   Pas de lancement par ligne de commande

➡   Interdépendance des tests

➡   Difficile de débugger un test
julien@cocoaheads.fr
  CocoaHeads #4                           thomas.dupont@cocoaheads.fr




Rotation sur iOS
   Mail   : thomas.dupont@cocoaheads.fr
   Web    : www.cocoaheads.fr




Tests automatisés sur iOS

   Mail    : quentin.arnault@gmail.com

Contenu connexe

En vedette

2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía
2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía
2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía
Biblioteca d'Humanitats, Universitat de València
 
2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar
2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar
2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar
Biblioteca d'Humanitats, Universitat de València
 
2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios
2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios
2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios
Biblioteca d'Humanitats, Universitat de València
 
Cuadros o formatos
Cuadros o formatosCuadros o formatos
Cuadros o formatos
Sergio Posada
 
Trabajo final
Trabajo final Trabajo final
Trabajo final
Caronana23
 
Fran-sylvain
Fran-sylvainFran-sylvain
Fran-sylvain
fmo69
 
Banco Popular Dominicano - Resultados preliminares cierre 2013
Banco Popular Dominicano - Resultados preliminares cierre 2013Banco Popular Dominicano - Resultados preliminares cierre 2013
Banco Popular Dominicano - Resultados preliminares cierre 2013
Banco Popular
 
Las vegas
Las vegasLas vegas
Las vegas
treballsana
 
Afiches
Afiches Afiches
Afiches
ximena poblete
 
Rita Levi
Rita Levi Rita Levi
Rita Levi
Christian Delwiche
 
Action pasteur- Fighting Malaria in West Africa
Action pasteur- Fighting Malaria in West AfricaAction pasteur- Fighting Malaria in West Africa
Action pasteur- Fighting Malaria in West Africa
Rotary International
 
Historylan
HistorylanHistorylan
Historylan
dennyschico1
 
Planta carnevali fin
Planta carnevali finPlanta carnevali fin
Planta carnevali fin
Sergio Posada
 
Las etas
Las etasLas etas
Las etas
Sergio Posada
 
2013_1_ciMedio_Tema6TrobesMiCuenta
2013_1_ciMedio_Tema6TrobesMiCuenta2013_1_ciMedio_Tema6TrobesMiCuenta
2013_1_ciMedio_Tema6TrobesMiCuenta
Biblioteca d'Humanitats, Universitat de València
 
2014_1_ciAvanzRecEspPeriodComAud
2014_1_ciAvanzRecEspPeriodComAud2014_1_ciAvanzRecEspPeriodComAud
2014_1_ciAvanzRecEspPeriodComAud
Biblioteca d'Humanitats, Universitat de València
 
Madero
MaderoMadero
Madero
HISTOGLASS
 
Estadistica y probabilidad
Estadistica y probabilidadEstadistica y probabilidad
Estadistica y probabilidad
luiggi091
 
El absoluto
El absolutoEl absoluto
El absoluto
hjonilton
 

En vedette (20)

2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía
2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía
2014_2ciBásicoTema5FuentesDeInformaciónParaFilosofía
 
2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar
2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar
2014_2ciBásicoTema6UsoÉticoylegalDelaInformación.CómoCitar
 
2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios
2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios
2014_1_ciAvanzTema5SbdBcaHumanitatsColeccionServicios
 
Cuadros o formatos
Cuadros o formatosCuadros o formatos
Cuadros o formatos
 
Trabajo final
Trabajo final Trabajo final
Trabajo final
 
Fran-sylvain
Fran-sylvainFran-sylvain
Fran-sylvain
 
Banco Popular Dominicano - Resultados preliminares cierre 2013
Banco Popular Dominicano - Resultados preliminares cierre 2013Banco Popular Dominicano - Resultados preliminares cierre 2013
Banco Popular Dominicano - Resultados preliminares cierre 2013
 
Las vegas
Las vegasLas vegas
Las vegas
 
Afiches
Afiches Afiches
Afiches
 
Orient Magique
Orient MagiqueOrient Magique
Orient Magique
 
Rita Levi
Rita Levi Rita Levi
Rita Levi
 
Action pasteur- Fighting Malaria in West Africa
Action pasteur- Fighting Malaria in West AfricaAction pasteur- Fighting Malaria in West Africa
Action pasteur- Fighting Malaria in West Africa
 
Historylan
HistorylanHistorylan
Historylan
 
Planta carnevali fin
Planta carnevali finPlanta carnevali fin
Planta carnevali fin
 
Las etas
Las etasLas etas
Las etas
 
2013_1_ciMedio_Tema6TrobesMiCuenta
2013_1_ciMedio_Tema6TrobesMiCuenta2013_1_ciMedio_Tema6TrobesMiCuenta
2013_1_ciMedio_Tema6TrobesMiCuenta
 
2014_1_ciAvanzRecEspPeriodComAud
2014_1_ciAvanzRecEspPeriodComAud2014_1_ciAvanzRecEspPeriodComAud
2014_1_ciAvanzRecEspPeriodComAud
 
Madero
MaderoMadero
Madero
 
Estadistica y probabilidad
Estadistica y probabilidadEstadistica y probabilidad
Estadistica y probabilidad
 
El absoluto
El absolutoEl absoluto
El absoluto
 

Similaire à CocoaHeads Rennes #4 : Tests automatisés sur iOS

Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
Christophe Villeneuve
 
AT2010 Principes Integration Continue
AT2010 Principes Integration ContinueAT2010 Principes Integration Continue
AT2010 Principes Integration Continue
Normandy JUG
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
Sylvain Leroy
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaHeads France
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarElsassJUG
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
Arnaud Héritier
 
GWT no-dto
GWT no-dtoGWT no-dto
GWT no-dto
François Wauquier
 
Xcode Server - Jeffrey Macko
Xcode Server - Jeffrey MackoXcode Server - Jeffrey Macko
Xcode Server - Jeffrey Macko
CocoaHeads France
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
CocoaHeadsRNS
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
CocoaHeads France
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
qsdqsd4
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
Julien Wittouck
 
Proposition forge agile 1.0
Proposition forge agile 1.0Proposition forge agile 1.0
Proposition forge agile 1.0Laurent MEURISSE
 
"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours
Laurent MEURISSE
 
Deployer en continu, Benoît Lafontaine, USIEVENT 2013
Deployer en continu, Benoît Lafontaine, USIEVENT 2013Deployer en continu, Benoît Lafontaine, USIEVENT 2013
Deployer en continu, Benoît Lafontaine, USIEVENT 2013
Benoît Lafontaine
 
Tests d'Acceptance et Specflow
Tests d'Acceptance et SpecflowTests d'Acceptance et Specflow
Tests d'Acceptance et SpecflowCedricRup
 
Sonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveSonar 2.0 au JUG Genève
Sonar 2.0 au JUG Genève
Freddy Mallet
 
Sonar 2.0 au GenevaJUG par Freddy Mallet
Sonar 2.0 au GenevaJUG par Freddy MalletSonar 2.0 au GenevaJUG par Freddy Mallet
Sonar 2.0 au GenevaJUG par Freddy Mallet
GenevaJUG
 
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productifDev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
Stéphanie Moallic
 

Similaire à CocoaHeads Rennes #4 : Tests automatisés sur iOS (20)

Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
AT2010 Principes Integration Continue
AT2010 Principes Integration ContinueAT2010 Principes Integration Continue
AT2010 Principes Integration Continue
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
Normandy JUG integration Continue
Normandy JUG integration ContinueNormandy JUG integration Continue
Normandy JUG integration Continue
 
Soirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec SonarSoirée Qualité Logicielle avec Sonar
Soirée Qualité Logicielle avec Sonar
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
GWT no-dto
GWT no-dtoGWT no-dto
GWT no-dto
 
Xcode Server - Jeffrey Macko
Xcode Server - Jeffrey MackoXcode Server - Jeffrey Macko
Xcode Server - Jeffrey Macko
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Proposition forge agile 1.0
Proposition forge agile 1.0Proposition forge agile 1.0
Proposition forge agile 1.0
 
"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours
 
Deployer en continu, Benoît Lafontaine, USIEVENT 2013
Deployer en continu, Benoît Lafontaine, USIEVENT 2013Deployer en continu, Benoît Lafontaine, USIEVENT 2013
Deployer en continu, Benoît Lafontaine, USIEVENT 2013
 
Tests d'Acceptance et Specflow
Tests d'Acceptance et SpecflowTests d'Acceptance et Specflow
Tests d'Acceptance et Specflow
 
Sonar 2.0 au JUG Genève
Sonar 2.0 au JUG GenèveSonar 2.0 au JUG Genève
Sonar 2.0 au JUG Genève
 
Sonar 2.0 au GenevaJUG par Freddy Mallet
Sonar 2.0 au GenevaJUG par Freddy MalletSonar 2.0 au GenevaJUG par Freddy Mallet
Sonar 2.0 au GenevaJUG par Freddy Mallet
 
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productifDev Fest Nantes - Ionic le développement hybride mobile fun et productif
Dev Fest Nantes - Ionic le développement hybride mobile fun et productif
 

Plus de CocoaHeadsRNS

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeadsRNS
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeadsRNS
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeadsRNS
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
CocoaHeadsRNS
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
CocoaHeadsRNS
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
CocoaHeadsRNS
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : Notifications
CocoaHeadsRNS
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeadsRNS
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeadsRNS
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
CocoaHeadsRNS
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
CocoaHeadsRNS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeadsRNS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeadsRNS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4
CocoaHeadsRNS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeadsRNS
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeadsRNS
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisation
CocoaHeadsRNS
 

Plus de CocoaHeadsRNS (17)

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : Notifications
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
CocoaHeads Rennes #6
CocoaHeads Rennes #6CocoaHeads Rennes #6
CocoaHeads Rennes #6
 
CocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & AndroidCocoaHeads Rennes #5 : iOS & Android
CocoaHeads Rennes #5 : iOS & Android
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératif
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central Dispatch
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisation
 

CocoaHeads Rennes #4 : Tests automatisés sur iOS

  • 1. CocoaHeads Rennes Quentin Arnault 13 octobre 2011 Tests automatisés sur iOS
  • 2. Pourquoi ? Tests de bout en bout Comment ? xUnit Tests unitaires et d’intégration
  • 3. Quels sont nos objectifs ?
  • 4. Livrer nos produits ! Ecrire du code adaptable Y prendre du 1 plaisir 2 3
  • 5. Livrer nos produits ! ➡ Aide à la ➡ Tests plus rapide compréhension ➡ Isoler et valider Non régression une anomalie ➡ 1
  • 6. Ecrire du code adaptable ➡ Composants indépendants 2 ➡ Harnais de tests
  • 7. Y prendre du plaisir ➡ Esprit serein 3
  • 8. xUnit ➡ Créé par Kent Beck et Erich Gamma ➡ Disponible sur un nombre important de plateformes ➡ Principes : ➡ Environnement simple ➡ Exécution des tests à la chaine ➡ Compte rendu du résultat de l’exécution des tests
  • 9. Vocabulaire ➡ Assertion : prédicat attendu lors de l’exécution du test ➡ Test : méthode effectuant un test ➡ Test Case : classe regroupant un ensemble de Tests ➡ Test Suite : enchaînement de Test Case ➡ Fixture : contexte dans lequel un Test se déroule ➡ SUT : le système que l’on teste
  • 10. La boucle principale setUp test_should_reset tearDown Pour chaque méthode test… d’une classe Pour chaque classe de test
  • 11. Démo
  • 12. OCUnit ➡ Une implémentation de xUnit ➡ Répond aux besoins de tests unitaires ➡ Plus d’excuse, c’est INTÉGRÉ ! ➡ Mais manque de maturité
  • 13. GHUnit ➡ Une implémentation de xUnit ➡ Plus riche (tests asynchrones) ➡ Exécution de tests individuellement ➡ Mais plus lourd à la création du projet
  • 14. Démo
  • 15. OCUnit Vs GHUnit OCUnit GHUnit Possibilité de (re)lancer chaque test + Intégration Compatible OCUnit Macros plus riches - Lisibilité des logs Installation Utilisable depuis Xcode 4
  • 16. Pour vous aider OCMock
  • 17. Base de données Arrange Act SUT Webservices Assert Librairie tierce
  • 18. mock Arrange Act SUT mock Assert mock
  • 19. Deux phases id mockLine = [OCMockObject mockForClass:[Line class]]; [[mockLine expect] mergeResponse]; Enregistrement du contrat ... Enregistrement des messages [mockLine verify];
  • 20. Démo
  • 21. Vous leur direz merci ➡ Mise en place simplifiée ➡ Réduit le couplage ➡ Exécution des tests plus rapide ➡ Met en valeur les collaborations entre objets
  • 22. Peut masquer un problème d’intégration ➡ A coupler avec des tests d’intégration
  • 23. Les tests d’UI Testent la totalité de l’application C’est un peu (beaucoup) ennuyeux Facile d’oublier des tests Ce que les utilisateurs voient en premier
  • 24. UIAutomation proposé par Apple avec iOS 4.0 + Sonde pour Instruments Librairie JavaScript
  • 25. 1. Basé sur les informations d’accessibilités 2. Tests écrits dans un fichier JavaScript 3. Tests exécutés avec Instruments
  • 26. lockScreen orientationChange doubleTap flickInside background dragInside twoFingerTap tap touchAndHold
  • 27. Démo
  • 28. Il reste des limitations ➡ Pas de lancement par ligne de commande ➡ Interdépendance des tests ➡ Difficile de débugger un test
  • 29. julien@cocoaheads.fr CocoaHeads #4 thomas.dupont@cocoaheads.fr Rotation sur iOS Mail : thomas.dupont@cocoaheads.fr Web : www.cocoaheads.fr Tests automatisés sur iOS Mail : quentin.arnault@gmail.com