Post on 08-Jul-2015
description
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
.NET/C#
Software Craftsmanship
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
movie
s...
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
RedGreen
Refactor
RedGreen
RefactorRefactor your tests
qui garde les gardes ?
Mutation testing
Rapport pitest
Mutation testing
Source : http://pitest.org/
Mutation testing
Attention aux
ressources
Mutation testing
Comment gérerle code de test
legacy ?
Revue de code de test
● 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● ...
Lisibilité
● 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● …
maintenabilité
● 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)● ...
fiabilité
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 & StubsMocks 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 TestingNinjaTurtles : http://www.mutation-testing.net/
Pitest : http://pitest.org/
Merci