Les Aventures d'Alice 
la Révolte des Tests 
Ly-Jia Goldstein – Arolla 
@Ly_Jia
Que dit un test unitaire en 
entrant dans un bar ?
Assert-moi un vert !
Assert-moi un vert !
Développeuse 
@Ly_Jia 
Paris 
Software Craftsmanship 
.NET/C# 
TDD 
BDD 
DDD 
http://lyjia.net 
Jeux vidéo 
XP MeetUp
Test unitaire ?
Procédure permettant de vérifier le bon fonctionnement d'une 
partie précise d'un logiciel ou d'une portion d'un programme 
(appelée « unité » ou « module ») 
Source : Wikipédia
À quoi sert un 
test unitaire ?
Non-régression
Non-régression 
Feedback
Non-régression 
Feedback 
Documentation
Calendrier 
● Ajout d'évènements 
● Pas de chevauchement entre les évènements 
● Pas d'ajout d'évènement dans le passé 
● Affichage des évènements 
● Seulement ceux à venir 
● Selon une culture donnée
In the movies...
But in real life...
But in real life...
Let's check the code!!!
Tests morts
Tests morts
Coupez-leur 
la tête !
Tests morts
Tests liés à l'implémentation
Tests liés à l'implémentation
Tests liés à l'implémentation
Documentation
Logique
Logique 
Plusieurs assertions
Tests trop gros 
Logique 
Plusieurs assertions
Plus c'est petit, 
Plus c'est mignon
Plus c'est petit, 
Plus c'est mignon
Attention ! 
Parfois il est normal 
d'avoir plusieurs asserts 
dans un seul test !
Duplication de code !
Factorisation
SetUp / TearDown
Attention aux variables
Attention aux abus 
de fixture !
Builders
Builders
Builders
Utilisation du code de production
Tests inconsistants
Tests inconsistants 
● Random 
● DateTime.Now 
● Ordre des tests 
● Tests non unitaires (ex : dépendance 
à une base de données)
Granularité > Classe / Couplage
Mock
Mock
Mock
STUB
STUB
Mélanger Mock et Stub
Plusieurs Mocks 
dans un seul test
Récapitulatif des Pièges courants 
● Tests morts 
● Tests liés à l'implémentation 
● Trop de vérifications dans un seul test 
● Logique dans les tests 
● Abus du setup/teardown et des fixtures 
● Utiliser du code de production pour construire un test 
● Non-consistance (DateTime.Now, ordre des tests, random) 
● Granularité > classe (couplage avec un tiers) 
● Mélange entre Mock et Stub 
● Plusieurs mocks dans un seul test
Lisibilité 
Maintenabilité 
Fiabilité
Fluent ASSERTIONS
Jouer les tests le 
plus souvent possible
Code de production 
et code de test sont 
amis pour la vie
Red 
Green 
Refactor
Red 
Green 
Refactor 
Refactor your tests
qui garde 
les gardes ?
Mutation testing
Mutation testing 
Rapport pitest 
Source : http://pitest.org/
Mutation testing
Mutation testing 
Attention aux 
ressources
Comment gérer 
le code de test 
legacy ?
Revue de 
code de test
Lisibilité 
● Un test ne teste qu'une chose 
● Les asserts sont séparés des actions (ie sur différentes lignes) 
● Des valeurs simples sont utilisées pour vérifier les comportements 
● ...
maintenabilité 
● Les tests sont isolés les uns des autres et sont répétables 
● Tester des méthodes privées ou protected ne doit pas être une norme 
● Ne pas avoir plus d'un mock par test 
● …
fiabilité 
● Les tests unitaires sont séparés des tests d'intégration 
● Utiliser que des valeurs fixes (éviter DateTime.Now par exemple) 
● Les tests ne vérifient pas des valeurs qui sont créées dynamiquement 
(possibilité de reproduire du code de production dans le test) 
● ...
Sinon...
Coupez-leur 
la tête !
Frameworks et outils 
● Nunit, Xunit 
● Moq, RhinoMocks 
● NFluent 
● NinjaTurtles, OpenMutate 
● ContinuousTest / MightyMoose, Giles 
● Opencover 
● Junit 
● EasyMock, Mockito, JMock 
● AssertJ 
● Pitest 
● Infinitest 
● Cobertura
Bibliographie 
The Art of Unit Testing – Roy Osherove, http://artofunittesting.com/ 
TDD By Example – Kent Beck 
Mocks & Stubs 
Mocks Aren't Stubs – Martin Fowler, 
http://martinfowler.com/articles/mocksArentStubs.html 
Understanding Mock Objects – Roy Osherove, 
http://osherove.com/videos/2009/8/25/tdd-understanding-mock-objects.html 
Mutation Testing 
NinjaTurtles : http://www.mutation-testing.net/ 
Pitest : http://pitest.org/
Merci
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des Tests

Les Aventures d'Alice - la Révolte des Tests