29
Tests automatisés sur iOS Quentin Arnault CocoaHeads Rennes 13 octobre 2011

CocoaHeads Rennes #4 : Tests automatisés sur iOS

Embed Size (px)

DESCRIPTION

Slides de la présentation "Tests automatisés sur iOS" de la session des CocoaHeads Rennais du 13 octobre 2011. Présentation assurée par Quentin Arnault, Ingénieur chez Niji.

Citation preview

Page 1: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Tests automatisés sur iOS

Quentin ArnaultCocoaHeads Rennes13 octobre 2011

Page 2: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Pourquoi ?

Comment ? xUnit

Tests unitaires et d’intégration

Tests de bout en bout

Page 3: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Quels sont nos objectifs ?

Page 4: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Ecrire du code adaptable Y prendre du

plaisir12 3

Livrer nos produits !

Page 5: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Livrer nos produits !➡ Aide à la

compréhension

➡ Non régression

➡ Tests plus rapide

➡ Isoler et valider une anomalie1

Page 6: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Ecrire du code adaptable

➡Composants indépendants

➡ Harnais de tests2

Page 7: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Y prendre du plaisir

➡ Esprit serein

3

Page 8: CocoaHeads Rennes #4 : Tests automatisés sur iOS

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

Page 9: CocoaHeads Rennes #4 : Tests automatisés sur iOS

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

Page 10: CocoaHeads Rennes #4 : Tests automatisés sur iOS

La boucle principale

test_should_reset

tearDown

setUp

Pour chaque méthode test… d’une classe

Pour chaque classe de test

Page 11: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Démo

Page 12: CocoaHeads Rennes #4 : Tests automatisés sur iOS

OCUnit

➡ Une implémentation de xUnit

➡ Répond aux besoins de tests unitaires

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

➡ Mais manque de maturité

Page 13: CocoaHeads Rennes #4 : Tests automatisés sur iOS

GHUnit

➡ Une implémentation de xUnit

➡ Plus riche (tests asynchrones)

➡ Exécution de tests individuellement

➡ Mais plus lourd à la création du projet

Page 14: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Démo

Page 15: CocoaHeads Rennes #4 : Tests automatisés sur iOS

OCUnit Vs GHUnit

OCUnit GHUnit

+ Intégration

Possibilité de (re)lancer chaque test

Compatible OCUnit

Macros plus riches

- Lisibilité des logs

Utilisable depuis Xcode 4Installation

Page 16: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Pour vous aider

OCMock

Page 17: CocoaHeads Rennes #4 : Tests automatisés sur iOS

SUT

Arrange

Assert

Base de données

Webservices

Librairie tierce

Act

Page 18: CocoaHeads Rennes #4 : Tests automatisés sur iOS

SUT

mock

mock

mock

Arrange

Assert

Act

Page 19: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Deux phases

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

[[mockLine expect] mergeResponse];

[mockLine verify];

...

Enregistrement du contrat

Enregistrement des messages

Page 20: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Démo

Page 21: CocoaHeads Rennes #4 : Tests automatisés sur iOS

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

Page 22: CocoaHeads Rennes #4 : Tests automatisés sur iOS

➡ Peut masquer un problème d’intégration

➡ A coupler avec des tests d’intégration

Page 23: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Ce que les utilisateurs voient en premier

Facile d’oublier des tests

C’est un peu (beaucoup) ennuyeux

Testent la totalité de l’application

Les tests d’UI

Page 24: CocoaHeads Rennes #4 : Tests automatisés sur iOS

UIAutomation proposé par Apple avec iOS 4.0

Sonde pour Instruments Librairie JavaScript

+

Page 25: CocoaHeads Rennes #4 : Tests automatisés sur iOS

1. Basé sur les informations d’accessibilités

2. Tests écrits dans un fichier JavaScript

3. Tests exécutés avec Instruments

Page 26: CocoaHeads Rennes #4 : Tests automatisés sur iOS

tap

doubleTap

twoFingerTaptouchAndHold

dragInside

flickInside

orientationChange

background

lockScreen

Page 27: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Démo

Page 28: CocoaHeads Rennes #4 : Tests automatisés sur iOS

Il reste des limitations

➡ Pas de lancement par ligne de commande

➡ Interdépendance des tests

➡ Difficile de débugger un test