Aller au contenu

Introduction au test logiciel/Tests unitaires

Un livre de Wikilivres.

Dans ce chapitre, nous allons voir ce qu'est un "test unitaire" (ou "TU"). Il s'agit du test le plus couramment utilisé et le plus important. Nous verrons comment créer des tests unitaires pour votre code et comment les utiliser. Nous verrons enfin les limitations de ces tests.

Introduction aux tests unitaires

[modifier | modifier le wikicode]

L'objectif d'un test unitaire est de permettre au développeur de s'assurer qu'une unité de code ne comporte pas d'erreur de programmation. C'est un test, donc les vérifications sont faites en exécutant une petite partie (une « unité ») de code. En programmation orientée objet, l'unité est la classe[1]. Un test est donc un programme qui exécute le code d'une classe pour s'assurer que celle-ci est correcte, c'est-à-dire que ses résultats correspondent à ce qui est attendu dans des assertions prédéfinies (ex : Addition(1,2) = 1 + 2 doit être vrai).

Concrètement, un test, c'est du code. À chaque classe d'une application, on associe une autre classe qui la teste.

Les différences entre un test unitaire et un test fonctionnel sont que le TU[2] :

  • Ne communique pas avec une base de données ou par le réseau.
  • Ne génère ni ne modifie de fichiers (mais il peut en lire).
  • Peut-être lancé en même temps que d'autres TU.
  • Ne nécessite pas d'éditer une configuration à chaque lancement.

Les frameworks de type xUnit

[modifier | modifier le wikicode]

Pour écrire des tests unitaires, vous avez à votre disposition des frameworks qui vont vous faciliter l'écriture des tests. Vous n'aurez plus qu'à écrire les classes de tests et c'est le framework qui se chargera de les trouver, de les lancer et de vous donner les résultats ou les erreurs qui ont été détectées.

En Java
JUnit est le framework de type xUnit le plus utilisé pour Java. Il est tellement utilisé qu'il est livré avec la plupart des IDE. C'est ce framework sur lequel nous allons nous appuyer pour l'exemple ci-après.
En C++
Cutter, Google propose Google C++ Testing Framework, la fameuse bibliothèque Boost comprend la Boost Test Library.
En Python
la distribution de base de Python intègre unittest[3] mais il existe aussi PyUnit.
En PHP
les développeurs PHP utilisent PHPUnit (ex : Zend Framework, Drupal V8[4]) ; SimpleTest (ex : Drupal V7[5]) qui possède une documentation en français ; Atoum.
En Ruby
Ruby intègre Test::Unit.
En D
le langage intègre nativement le mot-clé unittest.
En Groovy
voir Unit Testing
En JavaScript
le framework jQuery utilise qunit, Jarvis, jfUnit, google-js-test
Dans d'autres langages
il existe des frameworks équivalents dans la plupart des langages : vous pouvez les découvrir dans l'article « List of unit testing frameworks » sur Wikipedia anglophone.
  1. Dans d'autres paradigmes, c'est plutôt la fonction ou la procédure qui peuvent être considérés comme l'unité testée
  2. https://matthiasnoback.nl/2020/05/ddd-and-your-database/
  3. http://docs.python.org/library/unittest.html
  4. https://www.drupal.org/project/testing
  5. http://drupal.org/simpletest