SlideShare une entreprise Scribd logo
XCode & Les Tests
ou
Des Tests au Code
Ekito - Cocoahead
Epitez - JF Marronnier
Sommaire
XCode 5 & XCTest
Nouvelle interface mettant en évidence les tests
 ajout d’un navigateur de tests (Copie d’écran ci
dessous)
o Contrôle d’exécution
o Visualise résultat de test
• Nouveau « framework » XCTest
• Les projets sont créés systématiquement avec une « cible »
test
Interface de Tests
•

Résultat global

Cas Test

Navigateur de
Cas Tests « Ko »
• Résultats
• Exécution
Tests : Pourquoi tester ?
• Trouver les erreurs de codage
• Vérifier que l’intégration du système
• Vérifier l’adéquation Spécification vs Logiciel
• Eviter/Détecter les régressions
Tests : On teste du code
Le tests s’exécutent sur du code existant,
n’est-ce pas ?
Mais :
•Imaginerons nous en tests ce qu’il n’a pas vu lors du codage ?
•Les bugs seront détectés tardivement (après le codage)
•En fin de projet, les budgets sont très limités ceci augment le risque
sur les tests et la correction des bugs détectés.
•Les tests sont liés au code et peut aux besoins utilisateur
Tests : TDD c’est quoi ?
C’est pourquoi que le TDD a été imaginé.
L’idée est décrire le tests avant le code. Le code
ne réponds qu’aux tests écris.
Ainsi :
•Le code ne répond qu’aux besoins exprimés ;
•Les erreurs sont détectés immédiatement ;
•Les tests sont automatiques
• Exécutable en permanence
• Permet de détecter les régressions ?
•…
Tests : TDD c’est quoi ?
Le cycle de travail est :
1.Écrire un tests qui est
2.Écrire le code minimal qui rend le
3.Récrire le code pour l’améliorer (« refactoring »)

Ecrire test
[Test Ko]

"Refactore"

Coder

[Test O k]

[test O k]

Test Ko
Test Ok
Test Ok
Tests : Règles de l’Oncle Bob
Ne pas oublier les règle de l’oncle Bob (Robert Martin)
•Vous n'êtes pas autorisé à écrire de code de production,
sauf si c'est pour faire une passe de test unitaire défaut.
•Vous n'êtes pas autorisé à écrire plus d'un test unitaire que
ce qui est suffisant pour faire faillite, et des erreurs de
compilation sont des échecs.
•Vous n'êtes pas autorisé à écrire de plus le code de
production que ce qui est suffisant pour passer d'une faute
de test unitaire.
TDD avec IOs : le MVC
Vue

Action
Utilisateur

Modifie

Notifie

Contrôleur

Modifie

Modèle
Tester un Modèle
Contrôleur -> Modèle

Model -> Controller

Le contrôleur accède directement à la classe
modèle.

Le modèle ne connais pas le contrôleur.
Il communique avec ses «   clients   » le
mécanisme de diffusion
NSNotificationCenter.

a. Le testeur instancie un objet « modèle » ;
b. Il le stimule ;
c. Il valide directement les données de cette objet.

a. Le testeur instancie un objet model ; s’abonne,
comme le contrôleur, au centre de notification du
model ;
b. Il stimule directement l’objet modèle ;
c. Il valide alors les notifications reçues.
TDD avec les Vues
Éléments du Storyboard
A partir de la class UIStoryBoard il est possible de charger un «  storyBoard  » à
partir de son nom.
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

Du storyBoard on peut récupérer le contrôleur associé.

// Pour récupérer le controller initial
monViewController * viewController = [storyboard instantiateInitialViewController];
//(ou) pour récupérer un controller par son nom
monViewController * viewController = [storyboard instantiateViewControllerWithIdentifier:@"controllerName"];
Tester composants vue
Pour respecter le TDD
a.Rédiger le test (composant non « nil »)
Définir le « IBOutlet » dans le contrôleur
 le test est Ko
b.Définir le composant dans la vue
Le relier avec le « IBOutlet » dans le contrôleur
 le test est Ok
Attributs composants
Noter que les attributs graphiques des
composants peuvent être défini avec le TDD (si
ceux-ci sont important pour le client).
Par exemple, le texte d’un label doit être verte:

a.XCTAssertEqualObjects([[viewController labelXX] textColor], [UIColor redColor], @"Bad label color")
b.Définir la couleur dans le storyBoard
TDD avec le contrôleur
Noter que l’objectif est de tester le contrôleur
« seul ». L’objectif n’est pas de tester ni la vue ni
le model.
Pour cela, nous allons utiliser des « Mocks ».
Plusieurs possibilités:
-Faire son propre mock (à la main)
-Utiliser un framework (OCMock, Mockito, …)
Notre propre mock
Pour cela, je créé une classe qui hérite de la classe à mockée.
Je redéveloppe les méthodes utilisées par la fonctionnalité du
contrôller testée. Dans ces fonction je sauvegarder les informations
que je veux testers (arguments, nombre d’appel, …)
Dans le contrôlleur je défini le modèle avec le mock. Pour cela, soit
:
•Utiliser un constructeur définissant le model
Model
•modifier l’attribut directement avec SetValue.
Contrôleur

Mock Model
Intégration continues
• Les tests peuvent être lancés en ligne de
commande. Cela permet d’exécuter le tests
avec jenkins.
xcodebuild test –scheme leprojet -destination "name=iPhone Retina (4-inch 64-bit) »

• Apple propose une solution. Pour cela il faut une
machine sous OSX Server. Et utiliser les
« bots ».
Le résultat ressemble à :
Références
Les sources de la démo sont ici :
 https://github.com/tijeff/tddIOSBlink
Bibliographie :
Test-Driven iOS Developpement de Graham Lee
Continous Integration in Xcode
Clean Code de Robert C. Martin
Refactoring Improving The Design of Existing code
de Martin Fowler

Contenu connexe

PDF
Multi-Threading Et Cocoa
PDF
Xcode Server - Jeffrey Macko
PDF
Code flow - Cocoaheads paris
PDF
Test flight et les outils de distribution continue par simone civetta de xebia
PDF
Gatekeeper par Guillaume Faure
PDF
Apéro techno node.js + AngularJS @Omnilog 2014
PPTX
Nouveauté iOS 6
PDF
BlaBlaCar - Going Native !
Multi-Threading Et Cocoa
Xcode Server - Jeffrey Macko
Code flow - Cocoaheads paris
Test flight et les outils de distribution continue par simone civetta de xebia
Gatekeeper par Guillaume Faure
Apéro techno node.js + AngularJS @Omnilog 2014
Nouveauté iOS 6
BlaBlaCar - Going Native !

Tendances (20)

PDF
Apple Watch par Benoit Capallere et Joeffrey Bocquet
PDF
Partie 2: Angular
PPTX
SPA avec Angular et SignalR (FR)
PDF
Plugins Xcode
PDF
iTunes Stats
PDF
Partie1 TypeScript
PDF
Hermes, génération et déploiement d'ipa by Peter Meuel
PDF
Transition de NIBs/XIBs vers Storyboards
PDF
NodeJS for Mobile App
PPSX
5 android web_service
PDF
Intro à angular
PDF
Intégration continue des projets PHP avec Jenkins
PDF
Node.js, le pavé dans la mare
PDF
AngularJS et autres techno frontend
PPTX
4 asynch task_services_thread
PPS
Comment écrire du code testable ?
KEY
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
PPTX
Ces outils qui vous font gagner du temps
PDF
PDF
Intégration continue & Qualité logicielle
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Partie 2: Angular
SPA avec Angular et SignalR (FR)
Plugins Xcode
iTunes Stats
Partie1 TypeScript
Hermes, génération et déploiement d'ipa by Peter Meuel
Transition de NIBs/XIBs vers Storyboards
NodeJS for Mobile App
5 android web_service
Intro à angular
Intégration continue des projets PHP avec Jenkins
Node.js, le pavé dans la mare
AngularJS et autres techno frontend
4 asynch task_services_thread
Comment écrire du code testable ?
CocoaHeads Toulouse - Marc Boudou / FreezySnail - Programmation concurrente
Ces outils qui vous font gagner du temps
Intégration continue & Qualité logicielle
Publicité

En vedette (20)

PDF
Spec et test agile sur mobile @airfrance #at lille & cocoaheads tls
KEY
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
PPT
CocoaHeads Toulouse - iOS TechTalk - Mélanie Bessagnet
PDF
IoT Best practices
PDF
Xcode formation-iphone-ipad-xcode-et-cocoa
PDF
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
PDF
Comment concilier Agilité et projet au forfait ?
PDF
Automate your build on Android with Jenkins
PPTX
Présentation iBeacon (cocoaheads toulouse)
PDF
Swift, opportunités et perspectives du dernier langage d'Apple
PDF
Use In IoT : l’objet connecté de la board au dashboard
PDF
Comment faire de HLS votre solution vidéo préférée ?
PPTX
Les différents design patterns pour CoreData par Emmanuel Furnon
PDF
Presentation clean architecture
PDF
Découvrir dtrace en ligne de commande.
PDF
PDF
Firebase par nicolas lehovetzki
PDF
Safari app extensions cleared up by Sanaa Squalli
PDF
MVC-RS par Grégoire Lhotelier
PDF
Chainable datasource
Spec et test agile sur mobile @airfrance #at lille & cocoaheads tls
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
CocoaHeads Toulouse - iOS TechTalk - Mélanie Bessagnet
IoT Best practices
Xcode formation-iphone-ipad-xcode-et-cocoa
DevOps - Retour d’expérience - RivieraDev du 20 Octobre 2011
Comment concilier Agilité et projet au forfait ?
Automate your build on Android with Jenkins
Présentation iBeacon (cocoaheads toulouse)
Swift, opportunités et perspectives du dernier langage d'Apple
Use In IoT : l’objet connecté de la board au dashboard
Comment faire de HLS votre solution vidéo préférée ?
Les différents design patterns pour CoreData par Emmanuel Furnon
Presentation clean architecture
Découvrir dtrace en ligne de commande.
Firebase par nicolas lehovetzki
Safari app extensions cleared up by Sanaa Squalli
MVC-RS par Grégoire Lhotelier
Chainable datasource
Publicité

Similaire à CocoaHeads Toulouse - Xcode et les tests - Epitez (20)

PPTX
Cocoaheads Paris Nombembre Test unitaires
PDF
CocoaHeads Rennes #4 : Tests automatisés sur iOS
PPTX
Human Talks Grenoble - 11/12/2012 - TDD
KEY
Flex Unit Testing
PPTX
Université du soir - TDD
PDF
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
PDF
TDD (Test Driven Developement) et refactoring
PDF
Présentation TDD UQAM
PDF
Conférence TDD UQAM - 22 mars 2018.pptx.pdf
PPTX
Conférence TDD UQAM - 22 mars 2018.pptx
PDF
How to start writing test
PPTX
Test unitaire
PPTX
Présentation des test driven development aka tdd
PDF
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
PDF
Tester c'est douter - Linkvalue tech
PDF
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
PDF
TDD de la vraie vie - AlpesCraft 2022
PPTX
[Agile Testing Day] Test Driven Development (TDD)
PPTX
Cocoaheads introduction ui_tests
PPT
Bbd dans le flow nov.2012
Cocoaheads Paris Nombembre Test unitaires
CocoaHeads Rennes #4 : Tests automatisés sur iOS
Human Talks Grenoble - 11/12/2012 - TDD
Flex Unit Testing
Université du soir - TDD
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
TDD (Test Driven Developement) et refactoring
Présentation TDD UQAM
Conférence TDD UQAM - 22 mars 2018.pptx.pdf
Conférence TDD UQAM - 22 mars 2018.pptx
How to start writing test
Test unitaire
Présentation des test driven development aka tdd
Tout ce que vous avez voulu savoir sur les Doublures sans jamais oser le dema...
Tester c'est douter - Linkvalue tech
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD de la vraie vie - AlpesCraft 2022
[Agile Testing Day] Test Driven Development (TDD)
Cocoaheads introduction ui_tests
Bbd dans le flow nov.2012

Plus de CocoaHeads France (20)

PDF
Mutation testing for a safer Future
PDF
iOS App Group for Debugging
PDF
Asynchronous swift
PDF
Visual accessibility in iOS11
PDF
My script - One year of CocoaHeads
PDF
Ui testing dealing with push notifications
PDF
CONTINUOUS DELIVERY WITH FASTLANE
PDF
L'intégration continue avec Bitrise
PDF
Super combinators
PDF
Design like a developer
PDF
Handle the error
PDF
Quoi de neuf dans iOS 10.3
PDF
SwiftyGPIO
PDF
Présentation de HomeKit
PDF
Programme MFI retour d'expérience
PDF
How to communicate with Smart things?
PDF
Build a lego app with CocoaPods
PDF
Let's migrate to Swift 3.0
PDF
Project Entourage
PDF
What's new in iOS9
Mutation testing for a safer Future
iOS App Group for Debugging
Asynchronous swift
Visual accessibility in iOS11
My script - One year of CocoaHeads
Ui testing dealing with push notifications
CONTINUOUS DELIVERY WITH FASTLANE
L'intégration continue avec Bitrise
Super combinators
Design like a developer
Handle the error
Quoi de neuf dans iOS 10.3
SwiftyGPIO
Présentation de HomeKit
Programme MFI retour d'expérience
How to communicate with Smart things?
Build a lego app with CocoaPods
Let's migrate to Swift 3.0
Project Entourage
What's new in iOS9

CocoaHeads Toulouse - Xcode et les tests - Epitez

  • 1. XCode & Les Tests ou Des Tests au Code Ekito - Cocoahead Epitez - JF Marronnier
  • 3. XCode 5 & XCTest Nouvelle interface mettant en évidence les tests  ajout d’un navigateur de tests (Copie d’écran ci dessous) o Contrôle d’exécution o Visualise résultat de test • Nouveau « framework » XCTest • Les projets sont créés systématiquement avec une « cible » test Interface de Tests • Résultat global Cas Test Navigateur de Cas Tests « Ko » • Résultats • Exécution
  • 4. Tests : Pourquoi tester ? • Trouver les erreurs de codage • Vérifier que l’intégration du système • Vérifier l’adéquation Spécification vs Logiciel • Eviter/Détecter les régressions
  • 5. Tests : On teste du code Le tests s’exécutent sur du code existant, n’est-ce pas ? Mais : •Imaginerons nous en tests ce qu’il n’a pas vu lors du codage ? •Les bugs seront détectés tardivement (après le codage) •En fin de projet, les budgets sont très limités ceci augment le risque sur les tests et la correction des bugs détectés. •Les tests sont liés au code et peut aux besoins utilisateur
  • 6. Tests : TDD c’est quoi ? C’est pourquoi que le TDD a été imaginé. L’idée est décrire le tests avant le code. Le code ne réponds qu’aux tests écris. Ainsi : •Le code ne répond qu’aux besoins exprimés ; •Les erreurs sont détectés immédiatement ; •Les tests sont automatiques • Exécutable en permanence • Permet de détecter les régressions ? •…
  • 7. Tests : TDD c’est quoi ? Le cycle de travail est : 1.Écrire un tests qui est 2.Écrire le code minimal qui rend le 3.Récrire le code pour l’améliorer (« refactoring ») Ecrire test [Test Ko] "Refactore" Coder [Test O k] [test O k] Test Ko Test Ok Test Ok
  • 8. Tests : Règles de l’Oncle Bob Ne pas oublier les règle de l’oncle Bob (Robert Martin) •Vous n'êtes pas autorisé à écrire de code de production, sauf si c'est pour faire une passe de test unitaire défaut. •Vous n'êtes pas autorisé à écrire plus d'un test unitaire que ce qui est suffisant pour faire faillite, et des erreurs de compilation sont des échecs. •Vous n'êtes pas autorisé à écrire de plus le code de production que ce qui est suffisant pour passer d'une faute de test unitaire.
  • 9. TDD avec IOs : le MVC Vue Action Utilisateur Modifie Notifie Contrôleur Modifie Modèle
  • 10. Tester un Modèle Contrôleur -> Modèle Model -> Controller Le contrôleur accède directement à la classe modèle. Le modèle ne connais pas le contrôleur. Il communique avec ses «   clients   » le mécanisme de diffusion NSNotificationCenter. a. Le testeur instancie un objet « modèle » ; b. Il le stimule ; c. Il valide directement les données de cette objet. a. Le testeur instancie un objet model ; s’abonne, comme le contrôleur, au centre de notification du model ; b. Il stimule directement l’objet modèle ; c. Il valide alors les notifications reçues.
  • 11. TDD avec les Vues
  • 12. Éléments du Storyboard A partir de la class UIStoryBoard il est possible de charger un «  storyBoard  » à partir de son nom. UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; Du storyBoard on peut récupérer le contrôleur associé. // Pour récupérer le controller initial monViewController * viewController = [storyboard instantiateInitialViewController]; //(ou) pour récupérer un controller par son nom monViewController * viewController = [storyboard instantiateViewControllerWithIdentifier:@"controllerName"];
  • 13. Tester composants vue Pour respecter le TDD a.Rédiger le test (composant non « nil ») Définir le « IBOutlet » dans le contrôleur  le test est Ko b.Définir le composant dans la vue Le relier avec le « IBOutlet » dans le contrôleur  le test est Ok
  • 14. Attributs composants Noter que les attributs graphiques des composants peuvent être défini avec le TDD (si ceux-ci sont important pour le client). Par exemple, le texte d’un label doit être verte: a.XCTAssertEqualObjects([[viewController labelXX] textColor], [UIColor redColor], @"Bad label color") b.Définir la couleur dans le storyBoard
  • 15. TDD avec le contrôleur Noter que l’objectif est de tester le contrôleur « seul ». L’objectif n’est pas de tester ni la vue ni le model. Pour cela, nous allons utiliser des « Mocks ». Plusieurs possibilités: -Faire son propre mock (à la main) -Utiliser un framework (OCMock, Mockito, …)
  • 16. Notre propre mock Pour cela, je créé une classe qui hérite de la classe à mockée. Je redéveloppe les méthodes utilisées par la fonctionnalité du contrôller testée. Dans ces fonction je sauvegarder les informations que je veux testers (arguments, nombre d’appel, …) Dans le contrôlleur je défini le modèle avec le mock. Pour cela, soit : •Utiliser un constructeur définissant le model Model •modifier l’attribut directement avec SetValue. Contrôleur Mock Model
  • 17. Intégration continues • Les tests peuvent être lancés en ligne de commande. Cela permet d’exécuter le tests avec jenkins. xcodebuild test –scheme leprojet -destination "name=iPhone Retina (4-inch 64-bit) » • Apple propose une solution. Pour cela il faut une machine sous OSX Server. Et utiliser les « bots ». Le résultat ressemble à :
  • 18. Références Les sources de la démo sont ici :  https://github.com/tijeff/tddIOSBlink Bibliographie : Test-Driven iOS Developpement de Graham Lee Continous Integration in Xcode Clean Code de Robert C. Martin Refactoring Improving The Design of Existing code de Martin Fowler