Cocoaheads Paris Nombembre Test unitaires
Upcoming SlideShare
Loading in...5
×
 

Cocoaheads Paris Nombembre Test unitaires

on

  • 2,303 views

 

Statistics

Views

Total Views
2,303
Views on SlideShare
869
Embed Views
1,434

Actions

Likes
2
Downloads
8
Comments
0

5 Embeds 1,434

http://cocoaheads.fr 1411
http://feeds.feedburner.com 9
http://confluence.keops.net 9
http://t.co 4
http://feedproxy.google.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Cocoaheads Paris Nombembre Test unitaires Cocoaheads Paris Nombembre Test unitaires Presentation Transcript

  • 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 ils m’aider ? =
  • 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 non accessibles) Faire du pas à pas dans le simulateur n’est pas productif Comment détecter les impacts quand on refactor une méthode ?
  • 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 l’année ?
  • 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 Impossible de lancer un seul test Lance les tests en même temps que l’application
  • OCUnit, test de recette Given :  developper.level = kBeginner;  developper.objectives = kLow; When  Framework *result = [develepper chooseUnitTestingFramework]; Then  assertThat(result, equalTo(OCUnit));
  • 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 = [develepper chooseUnitTestingFramework]; Then  assertThat(result, equalTo(GTM));
  • 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
  • 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...
  • GHUnit, test de recette Given :  developper.level = kMedium;  developper.objectives = kMedium; When  Framework *result = [develepper chooseUnitTestingFramework]; Then  assertThat(result, equalTo(GHUnit));
  • 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 RequêtesObjets métiers asynchrone Controller ViewViewControllers Views Services JSON ParserASIHTTPRequest
  • Tester quoi ?Model Controller Viewfacile Complexe
  • Tester quoi ? ModelObjets métiers Controller ViewViewControllers Views Services JSON Parser ASIHTTPRequest
  • 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:
  • 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
  • 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
  • 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 ?
  • 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 Préparation de la requete -(NSArray*) parseData:(NSData*) Traitement du retour
  • 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é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/
  • 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 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
  • 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