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

Preview:

DESCRIPTION

Talk présenté à BDX.IO Alice rêve de tests à ajouter dans son application quand elle aperçoit le Lapin blanc soucieux de qualité. Partie à sa poursuite, elle se trouve propulsée dans un monde ressemblant étrangement à son code, et commence à faire apparaître de nombreux tests unitaires. Pourtant, le Lapin blanc est encore insatisfait ; lesdits tests se rebellent, deviennent incontrôlables et ne veulent plus vérifier ce qu'elle veut. Comment Alice va-t-elle réussir à reprendre la main sur les tests et les faire fonctionner correctement ? À travers les aventures d'Alice, je vais vous présenter les pièges courants du testing qui découragent souvent les débutants, mais également les bonnes pratiques et des outils pour obtenir des tests fonctionnels et efficaces.

Citation preview

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