Transcript
Page 1: Les Aventures d'Alice - la Révolte des Tests

Les Aventures d'Alice

la Révolte des Tests

Ly-Jia Goldstein – Arolla

@Ly_Jia

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

Que dit un test unitaire en entrant dans un bar ?

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

Assert-moi un vert !

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

Assert-moi un vert !

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

Développeuse

@Ly_Jia

Paris

.NET/C#

Software Craftsmanship

TDD

BDD

DDD

http://lyjia.net

Jeux vidéo

XP MeetUp

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

Test unitaire ?

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

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

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

À quoi sert un test unitaire ?

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

Non-régression

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

Non-régression

Feedback

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

Non-régression

Feedback

Documentation

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

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

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

In the

movie

s...

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

But in

real

life..

.

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

But in

real

life..

.

Page 16: Les Aventures d'Alice - la Révolte des Tests
Page 17: Les Aventures d'Alice - la Révolte des Tests

Let's check the code!!!

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

Tests morts

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

Tests morts

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

Coupez-leur la tête !

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

Tests morts

Page 22: Les Aventures d'Alice - la Révolte des Tests
Page 23: Les Aventures d'Alice - la Révolte des Tests

Tests liés à l'implémentation

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

Tests liés à l'implémentation

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

Tests liés à l'implémentation

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

Documentation

Page 27: Les Aventures d'Alice - la Révolte des Tests
Page 28: Les Aventures d'Alice - la Révolte des Tests
Page 29: Les Aventures d'Alice - la Révolte des Tests

Logique

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

Logique

Plusieurs assertions

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

Tests trop gros

Logique

Plusieurs assertions

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

Plus c'est petit, Plus c'est mignon

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

Plus c'est petit, Plus c'est mignon

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

Attention ! Parfois il est normal

d'avoir plusieurs asserts dans un seul test !

Page 35: Les Aventures d'Alice - la Révolte des Tests
Page 36: Les Aventures d'Alice - la Révolte des Tests

Duplication de code !

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

Factorisation

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

SetUp / TearDown

Page 39: Les Aventures d'Alice - la Révolte des Tests
Page 40: Les Aventures d'Alice - la Révolte des Tests

Attention aux variables

Page 41: Les Aventures d'Alice - la Révolte des Tests
Page 42: Les Aventures d'Alice - la Révolte des Tests

Attention aux abus de fixture !

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

Builders

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

Builders

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

Builders

Page 46: Les Aventures d'Alice - la Révolte des Tests
Page 47: Les Aventures d'Alice - la Révolte des Tests

Utilisation du code de production

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

Tests inconsistants

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

Tests inconsistants

● Random● DateTime.Now● Ordre des tests● Tests non unitaires (ex : dépendance

à une base de données)

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

Granularité > Classe / Couplage

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

Mock

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

Mock

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

Mock

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

STUB

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

STUB

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

Mélanger Mock et Stub

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

Plusieurs Mocks dans un seul test

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

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

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

Lisibilité

Maintenabilité

Fiabilité

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

Fluent ASSERTIONS

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

Jouer les tests le plus souvent possible

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

Code de production et code de test sont

amis pour la vie

Page 63: Les Aventures d'Alice - la Révolte des Tests
Page 64: Les Aventures d'Alice - la Révolte des Tests

RedGreen

Refactor

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

RedGreen

RefactorRefactor your tests

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

qui garde les gardes ?

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

Mutation testing

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

Rapport pitest

Mutation testing

Source : http://pitest.org/

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

Mutation testing

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

Attention aux

ressources

Mutation testing

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

Comment gérerle code de test

legacy ?

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

Revue de code de test

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

● 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é

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

● 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é

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

● 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é

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

Sinon...

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

Coupez-leur la tête !

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

Frameworks et outils

● Nunit, Xunit

● Moq, RhinoMocks

● NFluent

● NinjaTurtles, OpenMutate

● ContinuousTest / MightyMoose, Giles

● Opencover

● Junit

● EasyMock, Mockito, JMock

● AssertJ

● Pitest

● Infinitest

● Cobertura

Page 79: Les Aventures d'Alice - la Révolte des Tests
Page 80: Les Aventures d'Alice - la Révolte des Tests

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/

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

Merci

Page 82: Les Aventures d'Alice - la Révolte des Tests
Page 83: Les Aventures d'Alice - la Révolte des Tests