SlideShare a Scribd company logo
1 of 13
Download to read offline
L'amélioration des tests
unitaires par le refactoring
Pascal Laurin
Mai 2015
@plaurin78
pascal.laurin@outlook.com
www.pascallaurin.com
Microsoft .NET MVP
Développeur & Architecte chez GSoft
Maintenance
Si on n’est pas capable de comprendre un test qui plante, il ne
sert pas à grand chose
Remplacer les tests inutiles
Apprendre refactoring
Moins risqué qu’avec du code de production
Portée plus réduite dans les tests
Un bon défi
On tombe parfois sur de bon challenges
On n’a pas toujours l’occasion de partir de zéro
Pourquoi refactorer les tests unitaires
Facile à comprendre
Facile à lire
On doit comprendre immédiatement ce qui se passe s’il échoue
Indépendant
Les tests doivent pouvoir s’exécuter dans n’importe quel ordre
Ne doit pas avoir de dépendances externes
Rapide
Exécution en moins de 0.01 secondes (ou 100 tests/seconde)
Doit tester une seule chose
Sinon il y a plusieurs raison d’échouer et le problème va être plus
difficile à diagnostiquer
3
Les bons tests unitaires
Nom de la méthode de test
Doit ce lire comme le résumé du test
Code du tests
Structurer par block Arrange, Act et Assert
Nom de variables significatives
Utilisation de méthodes utilitaires
Méthodes de création, arrange et assert pour faciliter la lecture
Utilisation de classes utilitaires et classes de base pour la réutilisation
des méthodes utilitaires
Cacher ce qui n'est pas pertinent aux tests
Setup répétitif, plomberie d'architecture, les mocks, les valeurs
littérales qui ne sont pas importantes, etc...
Éviter les valeurs hard-coder
Utilisation de valeurs aléatoire (avec AutoFixture)
4
Facile à comprendre
Pas basé sur l'état des tests précédents
Chaque test est responsable de l’état initial du système sous test
Éviter les bases de données et les web services externes
DDD, architecture hexagonale, mocker les dépendances
externes
Voir les prochaines slides
5
Indépendant
Le domaine d’affaire au centre
Les ports expose un API pour accéder au domaine
Les adaptateurs font le pont entre les ports et les
dépendances externes
6
Architecture Hexagonale (Ports & Adapters)
Domain
UI
API
Data Store
External
Services
Ports
Adapters
Séparer les différents sous-domaines
d’affaires dans leurs propres
« domaines / hexagones »
7
DDD et Bounded Contexts
On teste juste le domaine
Le test utilise les ports entrants dans le domaine
On mocks ou stubs la partie adaptateur
8
Tests Unitaires
Domain
Test
Unitaire
Mocks ou
Stubs
Ports
Adapters
On teste juste les adaptateurs
Le test utilise les ports sortants du domaine
Les adaptateurs appel les vrais dépendances externes
9
Tests d’Intégrations
Domain
Test
d’Intégration
Vrais
dépendances
externes
Ports
Adapters
Pas d'appel externe
Utilisation d’Interfaces pour fournir des « tests doubles » dans les
test unitaires
Utiliser le principe d’Inversion de Contrôle (IoC) et Injection de
Dépendances (DI)
Utiliser des Mocks (et mocking framework) pour se faciliter la vie
Séparer les tests d'intégrations/systèmes
Tests unitaires pour le domaine d’affaire
Tests d’intégration pour les adaptateurs vers les systèmes
externes
10
Rapide
Séparer les tests
Créer deux ou plusieurs tests à partir d’un test qui en fait trop
Extraire les tests d’intégrations
En cas d’échec le message doit être clair
Ajouter des traces au besoin
Toujours fournir une explication sur les Assert
Utiliser une libraires spécialiser (ie Fluent Assertions)
Arrange qui compare les objets attendus des objets
actuels
En implémentant ToString() (et/ou Equals() et GetHashCode())
Sérialisation Json pour comparer et afficher l’état des objets
11
Tester une seule chose
C'est difficile avant d'avoir l'architecture en place
Moins adapté pour la plomberie
Si on se trompe on doit changer beaucoup de tests
Tester au bon niveau pour ne pas avoir à modifier les
tests tout le temps
Éviter de tester les méthodes et classes privées
Focus sur les API publiques du domaine (les Ports)
Penser à extraire le code complexe dans son propre sous-
système au besoin
Commands and Queries
Facilite les tests car on ne teste pas les requêtes de la même
façon que les commandes (modifications au système)
12
Planifier le développement piloté par les tests
TDD
Références
SlideShare pour la présentation
• http://www.slideshare.net/PascalLaurin
BitBucket pour le code
• http://bit.ly/1ITLwca
DDD book by Eric Evans
• http://www.amazon.ca/dp/0321125215
DDD Quickly
• http://www.infoq.com/minibooks/domain-driven-design-quickly
FakeItEasy
• http://fakeiteasy.github.io/
AutoFixture
• https://github.com/AutoFixture/AutoFixture
Fasterflect
• https://fasterflect.codeplex.com/
Questions?
@plaurin78
pascal.laurin@outlook.com
www.pascallaurin.com

More Related Content

What's hot

Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLy-Jia Goldstein
 
TDD avec ou sans mock
TDD avec ou sans mockTDD avec ou sans mock
TDD avec ou sans mockYannick Ameur
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.AZUG FR
 
Rédaction de tests unitaires avec fakes
Rédaction de tests unitaires avec fakesRédaction de tests unitaires avec fakes
Rédaction de tests unitaires avec fakesMSDEVMTL
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)Cellenza
 
[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de testsCellenza
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverteEric Mignot
 
[Agile Testing Day] Behavior Driven Development (BDD)
[Agile Testing Day] Behavior Driven Development (BDD)[Agile Testing Day] Behavior Driven Development (BDD)
[Agile Testing Day] Behavior Driven Development (BDD)Cellenza
 
Bolts Framework
Bolts FrameworkBolts Framework
Bolts FrameworkScribd
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringneuros
 
Réunion technique PMSIpilot - Mars 2010
Réunion technique PMSIpilot - Mars 2010Réunion technique PMSIpilot - Mars 2010
Réunion technique PMSIpilot - Mars 2010PMSIpilot
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Frameworklaurent bristiel
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDXavier NOPRE
 

What's hot (20)

Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Les tests en PHP
Les tests en PHPLes tests en PHP
Les tests en PHP
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des Tests
 
TDD avec ou sans mock
TDD avec ou sans mockTDD avec ou sans mock
TDD avec ou sans mock
 
Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.Tester avant de déployer ; comment tester ses déploiements ARM.
Tester avant de déployer ; comment tester ses déploiements ARM.
 
Rédaction de tests unitaires avec fakes
Rédaction de tests unitaires avec fakesRédaction de tests unitaires avec fakes
Rédaction de tests unitaires avec fakes
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)[Agile Testing Day] Test Driven Development (TDD)
[Agile Testing Day] Test Driven Development (TDD)
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests[Agile Testing Day] Techniques avancées de tests
[Agile Testing Day] Techniques avancées de tests
 
Tdd en action - découverte
Tdd en action - découverteTdd en action - découverte
Tdd en action - découverte
 
[Agile Testing Day] Behavior Driven Development (BDD)
[Agile Testing Day] Behavior Driven Development (BDD)[Agile Testing Day] Behavior Driven Development (BDD)
[Agile Testing Day] Behavior Driven Development (BDD)
 
Bolts Framework
Bolts FrameworkBolts Framework
Bolts Framework
 
J Unit
J UnitJ Unit
J Unit
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoring
 
Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 
Réunion technique PMSIpilot - Mars 2010
Réunion technique PMSIpilot - Mars 2010Réunion technique PMSIpilot - Mars 2010
Réunion technique PMSIpilot - Mars 2010
 
Automatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot FrameworkAutomatisations des tests fonctionnels avec Robot Framework
Automatisations des tests fonctionnels avec Robot Framework
 
Human Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDDHuman Talks Grenoble - 11/12/2012 - TDD
Human Talks Grenoble - 11/12/2012 - TDD
 

Viewers also liked

Presentation-AMounem-29-09-2014
Presentation-AMounem-29-09-2014Presentation-AMounem-29-09-2014
Presentation-AMounem-29-09-2014ConsortiumArcMC
 
Discours de Cécile Duflot
Discours de Cécile Duflot Discours de Cécile Duflot
Discours de Cécile Duflot Hélène Seloger
 
Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012Phytofar mobile
 
française basique zulay revelo g
française basique zulay revelo gfrançaise basique zulay revelo g
française basique zulay revelo gzulygab
 
Portail immobilier prox-immo.fr
Portail immobilier prox-immo.frPortail immobilier prox-immo.fr
Portail immobilier prox-immo.francelduval
 
Présentation Café de la Terre (collectif jardinier MTL, QB, CA)
Présentation Café de la Terre (collectif jardinier MTL, QB, CA)Présentation Café de la Terre (collectif jardinier MTL, QB, CA)
Présentation Café de la Terre (collectif jardinier MTL, QB, CA)Vladimir Ilich Lopez Flores
 
Catalogue original 1963
 Catalogue original 1963 Catalogue original 1963
Catalogue original 1963grosseconne1
 
Présentation5
Présentation5Présentation5
Présentation5cmt3963
 
USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !Djamel Zouaoui
 
Carrière informatique sam savoie
Carrière informatique  sam savoieCarrière informatique  sam savoie
Carrière informatique sam savoiesamsavoie13
 
Encadrement des loyers : liste des villes concernées
Encadrement des loyers : liste des villes concernéesEncadrement des loyers : liste des villes concernées
Encadrement des loyers : liste des villes concernéesHélène Seloger
 
Dp union énergétique
Dp union énergétiqueDp union énergétique
Dp union énergétiqueRAC-F
 
Les industries manufacturières en Tunisie
Les industries manufacturières en TunisieLes industries manufacturières en Tunisie
Les industries manufacturières en TunisieAMZ Software
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Djamel Zouaoui
 

Viewers also liked (20)

Présentation réunion 26.06.15
Présentation réunion 26.06.15Présentation réunion 26.06.15
Présentation réunion 26.06.15
 
Presentation-AMounem-29-09-2014
Presentation-AMounem-29-09-2014Presentation-AMounem-29-09-2014
Presentation-AMounem-29-09-2014
 
Discours de Cécile Duflot
Discours de Cécile Duflot Discours de Cécile Duflot
Discours de Cécile Duflot
 
Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012
 
française basique zulay revelo g
française basique zulay revelo gfrançaise basique zulay revelo g
française basique zulay revelo g
 
Portail immobilier prox-immo.fr
Portail immobilier prox-immo.frPortail immobilier prox-immo.fr
Portail immobilier prox-immo.fr
 
Programme de 4 jours
Programme de 4 joursProgramme de 4 jours
Programme de 4 jours
 
Présentation Café de la Terre (collectif jardinier MTL, QB, CA)
Présentation Café de la Terre (collectif jardinier MTL, QB, CA)Présentation Café de la Terre (collectif jardinier MTL, QB, CA)
Présentation Café de la Terre (collectif jardinier MTL, QB, CA)
 
Catalogue original 1963
 Catalogue original 1963 Catalogue original 1963
Catalogue original 1963
 
C’est Skaistkalne
C’est SkaistkalneC’est Skaistkalne
C’est Skaistkalne
 
Joue avec m'oie
Joue avec m'oieJoue avec m'oie
Joue avec m'oie
 
Présentation5
Présentation5Présentation5
Présentation5
 
USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !USI 2011 - De l offshore qui fonctionne !
USI 2011 - De l offshore qui fonctionne !
 
Carrière informatique sam savoie
Carrière informatique  sam savoieCarrière informatique  sam savoie
Carrière informatique sam savoie
 
Encadrement des loyers : liste des villes concernées
Encadrement des loyers : liste des villes concernéesEncadrement des loyers : liste des villes concernées
Encadrement des loyers : liste des villes concernées
 
Géologie cozon
Géologie cozonGéologie cozon
Géologie cozon
 
Dp union énergétique
Dp union énergétiqueDp union énergétique
Dp union énergétique
 
Les industries manufacturières en Tunisie
Les industries manufacturières en TunisieLes industries manufacturières en Tunisie
Les industries manufacturières en Tunisie
 
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
Microsoft Tech days 2007 - Industrialisation des développements : Retours d'e...
 
Programme de 16 jours
Programme de 16 joursProgramme de 16 jours
Programme de 16 jours
 

Similar to L'amélioration des tests unitaires par le refactoring

Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Elapse Technologies
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2Christophe Rochefolle
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes PratiquesEmmanuel Hugonnet
 
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4Emmanuel Hugonnet
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaHeads France
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs Microsoft
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowMathias Kluba
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...Sébastien Levert
 
10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciel10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciellauraty3204
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsOCTO Technology
 
SharePoint 2010 & Team Foundation Server
SharePoint 2010 & Team Foundation ServerSharePoint 2010 & Team Foundation Server
SharePoint 2010 & Team Foundation ServerPhilippe Sentenac
 
SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...
SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...
SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...GUSS
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueXavier Callens
 
Automatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBiAutomatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBiCédric Charlier
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciel13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciellauraty3204
 

Similar to L'amélioration des tests unitaires par le refactoring (20)

Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Normandy JUG integration Continue
Normandy JUG integration ContinueNormandy JUG integration Continue
Normandy JUG integration Continue
 
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel  - Introduction Et Bonnes PratiquesIndustrialisation Du Logiciel  - Introduction Et Bonnes Pratiques
Industrialisation Du Logiciel - Introduction Et Bonnes Pratiques
 
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4Industrialisation Du Logiciel   Introduction Et Bonnes Pratiques   V1.4
Industrialisation Du Logiciel Introduction Et Bonnes Pratiques V1.4
 
Cocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitairesCocoaheads Paris Nombembre Test unitaires
Cocoaheads Paris Nombembre Test unitaires
 
SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - Specflow
 
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
SharePoint Summit 2012 - Les tests automatisés et SharePoint 2010, c'est poss...
 
10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciel10-Cours de Géniel Logiciel
10-Cours de Géniel Logiciel
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
SharePoint 2010 & Team Foundation Server
SharePoint 2010 & Team Foundation ServerSharePoint 2010 & Team Foundation Server
SharePoint 2010 & Team Foundation Server
 
SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...
SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...
SQLSaturday Paris 2014 - Automatisez les tests de vos développements BI grâce...
 
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continueOmnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
Omnilog 2016 - Apéro techno : Rex Identicar sur l'intégration continue
 
Automatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBiAutomatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBi
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciel13-Cours de Géniel Logiciel
13-Cours de Géniel Logiciel
 

More from MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 

More from MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 

L'amélioration des tests unitaires par le refactoring

  • 1. L'amélioration des tests unitaires par le refactoring Pascal Laurin Mai 2015 @plaurin78 pascal.laurin@outlook.com www.pascallaurin.com Microsoft .NET MVP Développeur & Architecte chez GSoft
  • 2. Maintenance Si on n’est pas capable de comprendre un test qui plante, il ne sert pas à grand chose Remplacer les tests inutiles Apprendre refactoring Moins risqué qu’avec du code de production Portée plus réduite dans les tests Un bon défi On tombe parfois sur de bon challenges On n’a pas toujours l’occasion de partir de zéro Pourquoi refactorer les tests unitaires
  • 3. Facile à comprendre Facile à lire On doit comprendre immédiatement ce qui se passe s’il échoue Indépendant Les tests doivent pouvoir s’exécuter dans n’importe quel ordre Ne doit pas avoir de dépendances externes Rapide Exécution en moins de 0.01 secondes (ou 100 tests/seconde) Doit tester une seule chose Sinon il y a plusieurs raison d’échouer et le problème va être plus difficile à diagnostiquer 3 Les bons tests unitaires
  • 4. Nom de la méthode de test Doit ce lire comme le résumé du test Code du tests Structurer par block Arrange, Act et Assert Nom de variables significatives Utilisation de méthodes utilitaires Méthodes de création, arrange et assert pour faciliter la lecture Utilisation de classes utilitaires et classes de base pour la réutilisation des méthodes utilitaires Cacher ce qui n'est pas pertinent aux tests Setup répétitif, plomberie d'architecture, les mocks, les valeurs littérales qui ne sont pas importantes, etc... Éviter les valeurs hard-coder Utilisation de valeurs aléatoire (avec AutoFixture) 4 Facile à comprendre
  • 5. Pas basé sur l'état des tests précédents Chaque test est responsable de l’état initial du système sous test Éviter les bases de données et les web services externes DDD, architecture hexagonale, mocker les dépendances externes Voir les prochaines slides 5 Indépendant
  • 6. Le domaine d’affaire au centre Les ports expose un API pour accéder au domaine Les adaptateurs font le pont entre les ports et les dépendances externes 6 Architecture Hexagonale (Ports & Adapters) Domain UI API Data Store External Services Ports Adapters
  • 7. Séparer les différents sous-domaines d’affaires dans leurs propres « domaines / hexagones » 7 DDD et Bounded Contexts
  • 8. On teste juste le domaine Le test utilise les ports entrants dans le domaine On mocks ou stubs la partie adaptateur 8 Tests Unitaires Domain Test Unitaire Mocks ou Stubs Ports Adapters
  • 9. On teste juste les adaptateurs Le test utilise les ports sortants du domaine Les adaptateurs appel les vrais dépendances externes 9 Tests d’Intégrations Domain Test d’Intégration Vrais dépendances externes Ports Adapters
  • 10. Pas d'appel externe Utilisation d’Interfaces pour fournir des « tests doubles » dans les test unitaires Utiliser le principe d’Inversion de Contrôle (IoC) et Injection de Dépendances (DI) Utiliser des Mocks (et mocking framework) pour se faciliter la vie Séparer les tests d'intégrations/systèmes Tests unitaires pour le domaine d’affaire Tests d’intégration pour les adaptateurs vers les systèmes externes 10 Rapide
  • 11. Séparer les tests Créer deux ou plusieurs tests à partir d’un test qui en fait trop Extraire les tests d’intégrations En cas d’échec le message doit être clair Ajouter des traces au besoin Toujours fournir une explication sur les Assert Utiliser une libraires spécialiser (ie Fluent Assertions) Arrange qui compare les objets attendus des objets actuels En implémentant ToString() (et/ou Equals() et GetHashCode()) Sérialisation Json pour comparer et afficher l’état des objets 11 Tester une seule chose
  • 12. C'est difficile avant d'avoir l'architecture en place Moins adapté pour la plomberie Si on se trompe on doit changer beaucoup de tests Tester au bon niveau pour ne pas avoir à modifier les tests tout le temps Éviter de tester les méthodes et classes privées Focus sur les API publiques du domaine (les Ports) Penser à extraire le code complexe dans son propre sous- système au besoin Commands and Queries Facilite les tests car on ne teste pas les requêtes de la même façon que les commandes (modifications au système) 12 Planifier le développement piloté par les tests TDD
  • 13. Références SlideShare pour la présentation • http://www.slideshare.net/PascalLaurin BitBucket pour le code • http://bit.ly/1ITLwca DDD book by Eric Evans • http://www.amazon.ca/dp/0321125215 DDD Quickly • http://www.infoq.com/minibooks/domain-driven-design-quickly FakeItEasy • http://fakeiteasy.github.io/ AutoFixture • https://github.com/AutoFixture/AutoFixture Fasterflect • https://fasterflect.codeplex.com/ Questions? @plaurin78 pascal.laurin@outlook.com www.pascallaurin.com