SlideShare a Scribd company logo
1 of 14
Download to read offline
Tests unitaires
simplifier les Assertions
by Guillaume EHRET
Guillaume EHRET
Développeur agile depuis 12 ans
passé par la case gestion de projet et aujourd'hui architecte applicatif pour
le compte des laboratoires Boiron
Pour me suivre
@guillaumeehret
http://gplus.to/guillaumeehret
Mon blog http://javamind-fr.blogspot.fr/
Pourquoi ce lightning talk ?
Tout développeur connait le principe des tests
unitaires et devrait les utiliser
Les TU ne sont pas qu'une question
de couleurs
ni qu'une question de % de
couverture du code par les tests
>80% < 40%
La qualité des tests est aussi
importante que la qualité du code
10 règles pour améliorer la qualité
de vos tests unitaires
Améliorer la qualité de vos tests
en 10 règles
1. Principe de la boite noire
un unit doit être considéré comme une boite noire à laquelle on passe
des paramètres d'entrée et qui va soit nous renvoyer un résultat
directement soit agir sur un système distant
2. Granularité
- si une méthode et plusieurs comportements ==> plusieurs tests
- si un comportement via plusieurs méthodes ==> un seul test
3. Consistence dans le temps
attention aux tests liés dates, aux appels asynchrones, services distant...
Améliorer la qualité de vos tests
en 10 règles
4. Avoir des tests lisibles
- la classe de test doit avoir un nom clair. Si elle est liée à une classe on
applique le pattern NomClasseTest
- le nom de la méthode doit tout de suite indiquer vos intentions. Utilisez
le should. Par exemple getById_ShouldReturn_AnEntity ou
getById_ShouldNotReturn_AnEntity_IfIdNull
- Forcez vous à utiliser autant voir plus de commentaires dans vos tests
que dans votre code
5. Utiliser des assertions claires
- utiliser un framework tel que FestAssert ou AssertJ (fork de fest assert)
- vous pouvez utiliser plusieurs assert dans une méthode de tests mais
toujours liés à la vérification du même comportement sinon découper vos
tests en plusieurs méthodes
Améliorer la qualité de vos tests
en 10 règles
6. Isolation entre les tests
- l'ordre d'exécution ne doit pas influer sur le résultat
- remettre le système dans le même état qu'avant l'exécution du test
- le setup global d'un test ne doit contenir que des initialisations
communes à tous les tests
7. Isolation entre les composants
Utiliser des mocks au maximum pour toutes les interactions externes
Le framework Mockito est très simple d'utilisation
8. Temps d'exécution
les tests doivent être joués le plus souvent possible
exécuter les tests complets sur un serveur d'intégration continue tel que
Jenkins
Améliorer la qualité de vos tests
en 10 règles
9. Automatiser l'exécution des tests
- automatiser l'exécution des différents scénarios de tests et ne pas
arrêter l'exécution automatique de ces tests une fois que l'application est
en production
- Séparer les tests unitaires, d'intégration ou fonctionnels dans le process
de build
10. Pas de catch exception
utiliser le @Test(expected = MyException.class)
si vous tester des cas passant et que votre code retourne des checked
exception rajoutez un throws pour les remonter plus haut
Rendre plus lisible ses assertions
JUnit
assertEquals(expected, actual);
confirme que égal à expected est l'objet actual?
Hamcrest
assertThat(actual, equalTo(expected));
confirme que l'objet actual est égal à expected ?
FEST-Assert / AssertJ
assertThat(actual).isEqualTo(expected);
confirme que l'objet actual est égal à expected ?
Références
http://infinitest.github.io/
https://github.com/junit-team/junit/wiki
http://hamcrest.org/
http://fest.easytesting.org/
https://github.com/joel-costigliola/assertj-core
http://martinfowler.com/articles/nonDeterminism.html
https://code.google.com/p/mockito/

More Related Content

What's hot

Exposé qualité et test
Exposé qualité et test Exposé qualité et test
Exposé qualité et test
Imen Turki
 

What's hot (20)

Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
 
Présentation banc_ test
Présentation banc_ testPrésentation banc_ test
Présentation banc_ test
 
Ingénierie du test 0.9
Ingénierie du test 0.9Ingénierie du test 0.9
Ingénierie du test 0.9
 
Les tests en PHP
Les tests en PHPLes tests en PHP
Les tests en PHP
 
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
 
Test unitaires
Test unitairesTest unitaires
Test unitaires
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
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
 
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1
 
Mockito Chti JUG
Mockito Chti JUGMockito Chti JUG
Mockito Chti JUG
 
Types de tests vs techniques de tests
Types de tests vs techniques de testsTypes de tests vs techniques de tests
Types de tests vs techniques de tests
 
Test de logiciels
Test de logiciels Test de logiciels
Test de logiciels
 
Exposé qualité et test
Exposé qualité et test Exposé qualité et test
Exposé qualité et test
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
 
Présentation Tests Fonctionnels
Présentation Tests FonctionnelsPrésentation Tests Fonctionnels
Présentation Tests Fonctionnels
 
TDD avec ou sans mock
TDD avec ou sans mockTDD avec ou sans mock
TDD avec ou sans mock
 
Formation jmeter
Formation jmeterFormation jmeter
Formation jmeter
 
Mémoire - L'automatisation des tests fonctionnels - Emeline Simon
Mémoire - L'automatisation des tests fonctionnels - Emeline SimonMémoire - L'automatisation des tests fonctionnels - Emeline Simon
Mémoire - L'automatisation des tests fonctionnels - Emeline Simon
 
Mesurer Les Performances Avec JMeter Cours Du Soir Valtech 25 Mars 2010
Mesurer Les Performances Avec JMeter   Cours Du Soir Valtech 25 Mars 2010Mesurer Les Performances Avec JMeter   Cours Du Soir Valtech 25 Mars 2010
Mesurer Les Performances Avec JMeter Cours Du Soir Valtech 25 Mars 2010
 
Tester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue techTester c'est douter - Linkvalue tech
Tester c'est douter - Linkvalue tech
 

Similar to Test unitaire

Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
Frederic Hardy
 
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
Emmanuel Hugonnet
 
Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...
Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...
Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...
CERTyou Formation
 

Similar to Test unitaire (20)

testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet AgileLes cinq bonnes pratiques des Tests Unitaires dans un projet Agile
Les cinq bonnes pratiques des Tests Unitaires dans un projet Agile
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Guide tests fonctionnels
Guide tests fonctionnelsGuide tests fonctionnels
Guide tests fonctionnels
 
Avis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests LogicielsAvis d'expert : Les Tests Logiciels
Avis d'expert : Les Tests Logiciels
 
TDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoringTDD (Test Driven Developement) et refactoring
TDD (Test Driven Developement) et refactoring
 
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...
 
Industrialisation des développements logiciels
Industrialisation des développements logicielsIndustrialisation des développements logiciels
Industrialisation des développements logiciels
 
Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1Presentation tests d'acceptations automatisés sug v1.1
Presentation tests d'acceptations automatisés sug v1.1
 
presentation Zest au JFTL 2014
presentation Zest au JFTL 2014presentation Zest au JFTL 2014
presentation Zest au JFTL 2014
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
20151013 - Réduire les coûts des tests de performance ?
20151013 - Réduire les coûts des tests de performance ?20151013 - Réduire les coûts des tests de performance ?
20151013 - Réduire les coûts des tests de performance ?
 
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
 
Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...
Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...
Cyjtest formation-tests-java-methode-de-plans-de-tests-et-jeux-d-essais-avec-...
 
Tester en continu avec le Cloud - GACHE HUCKERT - AXA FRANCE - Soirée du Test...
Tester en continu avec le Cloud - GACHE HUCKERT - AXA FRANCE - Soirée du Test...Tester en continu avec le Cloud - GACHE HUCKERT - AXA FRANCE - Soirée du Test...
Tester en continu avec le Cloud - GACHE HUCKERT - AXA FRANCE - Soirée du Test...
 
TDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroitTDD où l’art de développer à l’endroit
TDD où l’art de développer à l’endroit
 
Accélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringAccélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoring
 
[Agile Testing Day] Introduction
[Agile Testing Day] Introduction[Agile Testing Day] Introduction
[Agile Testing Day] Introduction
 

Test unitaire

  • 1. Tests unitaires simplifier les Assertions by Guillaume EHRET
  • 2. Guillaume EHRET Développeur agile depuis 12 ans passé par la case gestion de projet et aujourd'hui architecte applicatif pour le compte des laboratoires Boiron Pour me suivre @guillaumeehret http://gplus.to/guillaumeehret
  • 4. Pourquoi ce lightning talk ? Tout développeur connait le principe des tests unitaires et devrait les utiliser
  • 5. Les TU ne sont pas qu'une question de couleurs
  • 6. ni qu'une question de % de couverture du code par les tests >80% < 40%
  • 7. La qualité des tests est aussi importante que la qualité du code
  • 8. 10 règles pour améliorer la qualité de vos tests unitaires
  • 9. Améliorer la qualité de vos tests en 10 règles 1. Principe de la boite noire un unit doit être considéré comme une boite noire à laquelle on passe des paramètres d'entrée et qui va soit nous renvoyer un résultat directement soit agir sur un système distant 2. Granularité - si une méthode et plusieurs comportements ==> plusieurs tests - si un comportement via plusieurs méthodes ==> un seul test 3. Consistence dans le temps attention aux tests liés dates, aux appels asynchrones, services distant...
  • 10. Améliorer la qualité de vos tests en 10 règles 4. Avoir des tests lisibles - la classe de test doit avoir un nom clair. Si elle est liée à une classe on applique le pattern NomClasseTest - le nom de la méthode doit tout de suite indiquer vos intentions. Utilisez le should. Par exemple getById_ShouldReturn_AnEntity ou getById_ShouldNotReturn_AnEntity_IfIdNull - Forcez vous à utiliser autant voir plus de commentaires dans vos tests que dans votre code 5. Utiliser des assertions claires - utiliser un framework tel que FestAssert ou AssertJ (fork de fest assert) - vous pouvez utiliser plusieurs assert dans une méthode de tests mais toujours liés à la vérification du même comportement sinon découper vos tests en plusieurs méthodes
  • 11. Améliorer la qualité de vos tests en 10 règles 6. Isolation entre les tests - l'ordre d'exécution ne doit pas influer sur le résultat - remettre le système dans le même état qu'avant l'exécution du test - le setup global d'un test ne doit contenir que des initialisations communes à tous les tests 7. Isolation entre les composants Utiliser des mocks au maximum pour toutes les interactions externes Le framework Mockito est très simple d'utilisation 8. Temps d'exécution les tests doivent être joués le plus souvent possible exécuter les tests complets sur un serveur d'intégration continue tel que Jenkins
  • 12. Améliorer la qualité de vos tests en 10 règles 9. Automatiser l'exécution des tests - automatiser l'exécution des différents scénarios de tests et ne pas arrêter l'exécution automatique de ces tests une fois que l'application est en production - Séparer les tests unitaires, d'intégration ou fonctionnels dans le process de build 10. Pas de catch exception utiliser le @Test(expected = MyException.class) si vous tester des cas passant et que votre code retourne des checked exception rajoutez un throws pour les remonter plus haut
  • 13. Rendre plus lisible ses assertions JUnit assertEquals(expected, actual); confirme que égal à expected est l'objet actual? Hamcrest assertThat(actual, equalTo(expected)); confirme que l'objet actual est égal à expected ? FEST-Assert / AssertJ assertThat(actual).isEqualTo(expected); confirme que l'objet actual est égal à expected ?