# Introduction au test logiciel/Tests unitaires

* Introduction
* Tests unitaires
** JUnit
** PHPUnit
** SimpleTest
** Behat
* Doublures de test
* Tests et conception
* Qualité des tests
* Intégration dans le processus de développement
* Problématiques de tests
* Tests d'intrusion
* Conclusion
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

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. 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 :
* 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

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 mais il existe aussi PyUnit.

### En PHP

    les développeurs PHP utilisent PHPUnit (ex : Zend Framework, Drupal V8) ; SimpleTest (ex : Drupal V7) 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.

## Références

* ↑ 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
* ↑ https://matthiasnoback.nl/2020/05/ddd-and-your-database/
* ↑ http://docs.python.org/library/unittest.html
* ↑ https://www.drupal.org/project/testing
* ↑ http://drupal.org/simpletest

## Voir aussi

* SPARQL_Protocol_and_RDF_Query_Language/Travail_pratique/Initiation_à_PHPUnit sur Wikiversité
* https://github.com/derptest/phpmachinist pour tester les bases de données