Tests unitaires
 Tests unitaires en Java pendant 2ans Tests unitaires iOS pendant 2ansLa transition pique un peu…
Il était une fois un débutant…Je passe 90% de mon temps à essayer de faire marcherUIKit comment les tests unitaires vont i...
Qui débuggait tout le temps...J’utilise le debugger, et des logs
Et puis un jour…Développer avec le debugger devient un frein Debugger d’Xcode peu efficace (pas  d’évaluation, variables ...
Il se rend compte que : Les tests unitaires sur iOS finalement ça marche Et ça fait gagner du temps
C’est quoi le test unitaire de cette session ?Sortirez vous d’ici prêt à écrire au moins un test d’ici la fin de          ...
AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
Retour d’expérience Des projets de bout en bout en TDD avec 3 différents  Framework :    OCUnit    GTM    GHUnit
OCUnit, les pour Intégré à Xcode Stable Pas de configuration Se lance avec un raccourci clavier
OCUnit, les contre Utilisation d’un bundle différent de l’application Points d’arrêt en dehors des classes de tests Imp...
OCUnit, test de recette Given :    developper.level = kBeginner;    developper.objectives = kLow; When    Framework *...
GTM, les pour Target d’application pour les tests Bien intégré à Xcode Communauté active Peu de limitations
GTM, les contres Logs très difficilement exploitables Ne gère pas bien les exceptions
GTM, test de recette Given :    developper.level = kHigh;    developper.objectives = kHigh; When    Framework *result...
GHUnit, les pours Supporte les test écrits pour OCUnit et GTM Logs sexy Possibilité de lancé les tests individuellement...
GHUnit, les contres Pas d’intégration à Xcode Difficilement automatisable S’exécute dans context de l’application sur u...
GHUnit, test de recette Given :    developper.level = kMedium;    developper.objectives = kMedium; When    Framework ...
AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
Configurer OCUnit
Comment OCUnit fonctionne Xcode créé :    Une « application target »    Un « test bundle target »
Faire attention aux choix de targets
Template standard : ce que l’on ne veut pas…Interface
Template standard : ce que l’on ne veut pas…Implementation
Template custom : ce que l’on veut !Interface
Template custom : ce que l’on veut !Implementation
Un template de méthode de test
Un exemple de test
AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
Notre application                 Model                                           Délégation                              ...
Tester quoi ?Model    Controller           Viewfacile                       Complexe
Tester quoi ?                 ModelObjets métiers        Controller                                       ViewViewControll...
Où tester ?Controller                                             Service                                     ASI         ...
Où tester ? Préparation de la requête :    Est ce que la bonne url est appelée avec les bons paramètres ?    Est ce que...
Où tester ? Traitement de la réponse :    A partir du JSON est ce que j’alimente bien les objets de mon     modèle ?   ...
Où tester ? Chaine globale :    Est ce que j’appelle bien ASI ?    Est ce que je reçois la réponse de ASI ?    Est ce ...
AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
Tests des méthodes privéesTest                                           Service            -(Request*) requestForArticles...
Tests des méthodes privées Une implémentation complexe à tester :
Tests des méthodes privées Pas de valeur de retour
Tests des méthodes privées Appels de singletons
Tests des méthodes privées Créer des méthodes qui prennent des paramètres simples   à créer dans vos tests Créer des mét...
Comment modifier légèrement votre code pour créer des            situations faciles à tester
Tests des méthodes privées Une méthode facile à tester :
Tests des méthodes privées Une méthode facile à tester :
Tests des méthodes privées Un exemple de test :
AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
Pour aller plus loin Une autre session ? OCMock Tests des méthodes assynchrones CoreData
AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
Conclusion Privilégiez un Framework simple à un Framework complet Peu de tests vaut mieux que pas de tests du tout Dans...
Take away Pour récapituler :   Sortez la logique de vos controller   Identifier le code que vous souhaitez tester   So...
Cocoaheads Paris Nombembre Test unitaires
Prochain SlideShare
Chargement dans…5
×

Cocoaheads Paris Nombembre Test unitaires

2 668 vues

Publié le

Publié dans : Technologie
0 commentaire
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 668
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 438
Actions
Partages
0
Téléchargements
13
Commentaires
0
J’aime
4
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Cocoaheads Paris Nombembre Test unitaires

  1. 1. Tests unitaires
  2. 2.  Tests unitaires en Java pendant 2ans Tests unitaires iOS pendant 2ansLa transition pique un peu…
  3. 3. Il était une fois un débutant…Je passe 90% de mon temps à essayer de faire marcherUIKit comment les tests unitaires vont ils m’aider ? =
  4. 4. Qui débuggait tout le temps...J’utilise le debugger, et des logs
  5. 5. Et puis un jour…Développer avec le debugger devient un frein Debugger d’Xcode peu efficace (pas d’évaluation, variables non accessibles) Faire du pas à pas dans le simulateur n’est pas productif Comment détecter les impacts quand on refactor une méthode ?
  6. 6. Il se rend compte que : Les tests unitaires sur iOS finalement ça marche Et ça fait gagner du temps
  7. 7. C’est quoi le test unitaire de cette session ?Sortirez vous d’ici prêt à écrire au moins un test d’ici la fin de l’année ?
  8. 8. AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
  9. 9. Retour d’expérience Des projets de bout en bout en TDD avec 3 différents Framework :  OCUnit  GTM  GHUnit
  10. 10. OCUnit, les pour Intégré à Xcode Stable Pas de configuration Se lance avec un raccourci clavier
  11. 11. OCUnit, les contre Utilisation d’un bundle différent de l’application Points d’arrêt en dehors des classes de tests Impossible de lancer un seul test Lance les tests en même temps que l’application
  12. 12. OCUnit, test de recette Given :  developper.level = kBeginner;  developper.objectives = kLow; When  Framework *result = [develepper chooseUnitTestingFramework]; Then  assertThat(result, equalTo(OCUnit));
  13. 13. GTM, les pour Target d’application pour les tests Bien intégré à Xcode Communauté active Peu de limitations
  14. 14. GTM, les contres Logs très difficilement exploitables Ne gère pas bien les exceptions
  15. 15. GTM, test de recette Given :  developper.level = kHigh;  developper.objectives = kHigh; When  Framework *result = [develepper chooseUnitTestingFramework]; Then  assertThat(result, equalTo(GTM));
  16. 16. GHUnit, les pours Supporte les test écrits pour OCUnit et GTM Logs sexy Possibilité de lancé les tests individuellement Très simple à mettre en place
  17. 17. GHUnit, les contres Pas d’intégration à Xcode Difficilement automatisable S’exécute dans context de l’application sur un autre Thread  Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...
  18. 18. GHUnit, test de recette Given :  developper.level = kMedium;  developper.objectives = kMedium; When  Framework *result = [develepper chooseUnitTestingFramework]; Then  assertThat(result, equalTo(GHUnit));
  19. 19. AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
  20. 20. Configurer OCUnit
  21. 21. Comment OCUnit fonctionne Xcode créé :  Une « application target »  Un « test bundle target »
  22. 22. Faire attention aux choix de targets
  23. 23. Template standard : ce que l’on ne veut pas…Interface
  24. 24. Template standard : ce que l’on ne veut pas…Implementation
  25. 25. Template custom : ce que l’on veut !Interface
  26. 26. Template custom : ce que l’on veut !Implementation
  27. 27. Un template de méthode de test
  28. 28. Un exemple de test
  29. 29. AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
  30. 30. Notre application Model Délégation RequêtesObjets métiers asynchrone Controller ViewViewControllers Views Services JSON ParserASIHTTPRequest
  31. 31. Tester quoi ?Model Controller Viewfacile Complexe
  32. 32. Tester quoi ? ModelObjets métiers Controller ViewViewControllers Views Services JSON Parser ASIHTTPRequest
  33. 33. Où tester ?Controller Service ASI -(void) loadArticlesFrom:To: Préparation de la requete -(void) startAsynchronous -(void) requestFinished: Traitement de la réponse -(void) service:didSucceedWithArticles:
  34. 34. Où tester ? Préparation de la requête :  Est ce que la bonne url est appelée avec les bons paramètres ?  Est ce que les bons paramètres sont envoyés dans le body ?  Eventuellement validation des paramètres
  35. 35. Où tester ? Traitement de la réponse :  A partir du JSON est ce que j’alimente bien les objets de mon modèle ?  Les règles et la logique de traitement des articles est respectée ? • Si le status de l’article est … alors …  Si je reçois des liens est ce que je télécharge bien les données ? • Images, pdf, etc
  36. 36. Où tester ? Chaine globale :  Est ce que j’appelle bien ASI ?  Est ce que je reçois la réponse de ASI ?  Est ce que j’appelle bien la méthode didSucceed / didFail de mon delegate ?
  37. 37. AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
  38. 38. Tests des méthodes privéesTest Service -(Request*) requestForArticles Préparation de la requete -(NSArray*) parseData:(NSData*) Traitement du retour
  39. 39. Tests des méthodes privées Une implémentation complexe à tester :
  40. 40. Tests des méthodes privées Pas de valeur de retour
  41. 41. Tests des méthodes privées Appels de singletons
  42. 42. Tests des méthodes privées Créer des méthodes qui prennent des paramètres simples à créer dans vos tests Créer des méthodes qui retournent des objets simple à tester dans vos tests Gérer l’asynchrone en dehors de ces méthodes Pour plus d’informations voir le pattern « dependency injection »http://spin.atomicobject.com/2010/12/09/objection-dependency-injection-in-obj-c/
  43. 43. Comment modifier légèrement votre code pour créer des situations faciles à tester
  44. 44. Tests des méthodes privées Une méthode facile à tester :
  45. 45. Tests des méthodes privées Une méthode facile à tester :
  46. 46. Tests des méthodes privées Un exemple de test :
  47. 47. AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
  48. 48. Pour aller plus loin Une autre session ? OCMock Tests des méthodes assynchrones CoreData
  49. 49. AGENDAQuel framework choisir ?Un test simpleOù tester ?Cas réel : appel de Web ServicePour aller plus loinConclusion
  50. 50. Conclusion Privilégiez un Framework simple à un Framework complet Peu de tests vaut mieux que pas de tests du tout Dans certains cas développer en TDD est plus productif qu’avec le simulateur Modifier légèrement votre code pour créer des situations faciles à tester
  51. 51. Take away Pour récapituler :  Sortez la logique de vos controller  Identifier le code que vous souhaitez tester  Sortez le dans une méthode spécifique  Faites en sorte que cette méthode soit simple à tester

×