CocoaHeads Rennes #4 : Tests automatisés sur iOS

Preview:

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

Tests automatisés sur iOS

Quentin ArnaultCocoaHeads Rennes13 octobre 2011

Pourquoi ?

Comment ? xUnit

Tests unitaires et d’intégration

Tests de bout en bout

Quels sont nos objectifs ?

Ecrire du code adaptable Y prendre du

plaisir12 3

Livrer nos produits !

Livrer nos produits !➡ Aide à la

compréhension

➡ Non régression

➡ Tests plus rapide

➡ Isoler et valider une anomalie1

Ecrire du code adaptable

➡Composants indépendants

➡ Harnais de tests2

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

test_should_reset

tearDown

setUp

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

+ Intégration

Possibilité de (re)lancer chaque test

Compatible OCUnit

Macros plus riches

- Lisibilité des logs

Utilisable depuis Xcode 4Installation

Pour vous aider

OCMock

SUT

Arrange

Assert

Base de données

Webservices

Librairie tierce

Act

SUT

mock

mock

mock

Arrange

Assert

Act

Deux phases

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

[[mockLine expect] mergeResponse];

[mockLine verify];

...

Enregistrement du contrat

Enregistrement des messages

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

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

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

tap

doubleTap

twoFingerTaptouchAndHold

dragInside

flickInside

orientationChange

background

lockScreen

Démo

Il reste des limitations

➡ Pas de lancement par ligne de commande

➡ Interdépendance des tests

➡ Difficile de débugger un test