âčïž Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 1.6 months ago (distributed domain, exempt) |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://fr.wikipedia.org/wiki/Test_unitaire |
| Last Crawled | 2026-02-22 10:02:21 (1 month ago) |
| First Indexed | 2013-08-09 19:15:25 (12 years ago) |
| HTTP Status Code | 200 |
| Meta Title | Test unitaire â WikipĂ©dia |
| Meta Description | null |
| Meta Canonical | null |
| Boilerpipe Text | Un article de Wikipédia, l'encyclopédie libre.
En
programmation informatique
, le
test unitaire
(ou
TU
, voire
UT
pour
Unit Testing
en anglais) est une 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 »).
Dans les applications non critiques, l'écriture des tests unitaires a longtemps été considérée comme une tùche secondaire. Cependant, les méthodes
extreme programming
(XP) et
test driven development
(TDD) ont remis les tests unitaires, appelés « tests du programmeur », au centre de l'activité de programmation.
Les tests unitaires, en tant que principe de tester séparément des parties plus élémentaires d'un logiciel complexe, remonte aux débuts de l'
ingénierie logicielle
. En Juin 1956, H.D. Benington présente en effet le projet
SAGE
au symposium sur les méthodes de programmation avancée organisé par la
marine américaine
. L'approche utilisée prévoyait à l'issue de la phase de codage une étape de
« tests de paramÚtres »
pour valider la conformité des sous-programmes et composants à leur spécifications, avant de procéder à un
« test d'assemblage »
de ces composants
[
1
]
,
[
2
]
.
En 1964, une approche similaire est décrite pour les logiciels du
programme Mercury
 : les unitĂ©s individuelles dĂ©veloppĂ©es par diffĂ©rentes organisations Ă©taient soumises Ă des "tests unitaires" avant d'ĂȘtre intĂ©grĂ©es entre elles. En 1969, les mĂ©thodologies de tests sont structurĂ©es encore davantage, avec des tests unitaires, des tests de composants, et des
tests d'intégration
, dans le but de valider des parties élémentaires du logiciel séparément, puis de vérifier le bon fonctionnement des assemblages progressif en blocs plus larges
[
3
]
. Des normes publiques adoptées à la fin des années 60, telles que les standards militaires MIL-STD-483
[
4
]
et MIL-STD-490 de l'armée américaine contribuent à une large reconnaissance et adoption des tests unitaires au sein de gros projets.
Les tests unitaires étaient alors interactifs
[
2
]
, ou automatisés
[
5
]
, utilisant soit des tests programmés ou des outils de capture et répétition automatisés. En 1994
Kent Beck
décrit un environnement cadre de test pour le langage
Smalltalk
, qui deviendra
SUnit
[
6
]
par la suite
[
7
]
,
[
8
]
. En 1997,
Kent Beck
rencontre
Erich Gamma
avec lequel il crée
JUnit
qui, par sa popularité, entraßnera la création de nombreux
frameworks
de tests unitaires, cet ensemble se nomme
xUnit
[
9
]
.
Ă la mĂȘme Ă©poque, ATTOL Unit test est dĂ©veloppĂ©, puis utilisĂ© par
Sextant Avionique
en 1998
[
10
]
On écrit un test pour confronter une réalisation à sa
spécification
. Le
test
dĂ©finit un critĂšre d'arrĂȘt (Ă©tat ou sorties Ă l'issue de l'exĂ©cution) et permet de statuer sur le succĂšs ou sur l'Ă©chec d'une vĂ©rification. GrĂące Ă la spĂ©cification, on est en mesure de faire correspondre un Ă©tat d'entrĂ©e donnĂ© Ă un rĂ©sultat ou Ă une sortie. Le
test
permet de vérifier que la relation d'entrée / sortie donnée par la spécification est bel et bien réalisée.
La mĂ©thode XP prĂ©conise d'Ă©crire les tests en mĂȘme temps, ou mĂȘme avant la fonction Ă tester (
Test Driven Development
). Ceci permet de définir précisément l'interface du module à développer. Les tests sont exécutés durant tout le développement, permettant de visualiser si le code fraßchement écrit correspond au besoin.
Lors d'une modification d'un programme, les tests unitaires signalent les éventuelles
régressions
. En effet, certains tests peuvent échouer à la suite d'une modification, il faut donc soit réécrire le test pour le faire correspondre aux nouvelles attentes, soit corriger l'erreur se situant dans le code.
Les tests unitaires peuvent servir de complĂ©ment Ă
l'API
, il est trÚs utile de lire les tests pour comprendre comment s'utilise une méthode. De plus, il est possible que la documentation ne soit plus à jour, mais les tests eux correspondent à la réalité de l'application.
On définit généralement 4 phases dans l'exécution d'un test unitaire :
Initialisation
(fonction
setUp
) : définition d'un environnement de test complÚtement reproductible (une
fixture
).
Exercice
 : le module à tester est exécuté.
Vérification
(utilisation de fonctions
assert
) : comparaison des rĂ©sultats obtenus avec un vecteur de rĂ©sultat dĂ©fini. Ces tests dĂ©finissent le rĂ©sultat du test : SUCCĂS (
SUCCESS
) ou ĂCHEC (
FAILURE
). On peut Ă©galement dĂ©finir d'autres rĂ©sultats comme ĂVITĂ (
SKIPPED
).
Désactivation
(fonction
tearDown
) : désinstallation des
fixtures
pour retrouver l'Ă©tat initial du systĂšme, dans le but de ne pas polluer les tests suivants. Tous les tests doivent ĂȘtre indĂ©pendants et reproductibles unitairement (quand exĂ©cutĂ©s seuls).
Il s'agit pour le programmeur de tester un
module
, indépendamment du reste du programme, ceci afin de s'assurer qu'il réponde aux
spécifications fonctionnelles
et qu'il fonctionne correctement en toutes circonstances. Cette vérification est considérée comme essentielle, en particulier dans les applications critiques. Elle s'accompagne couramment d'une vérification de la
couverture de code
(évaluation de la couverture structurelle), qui consiste à s'assurer que l'ensemble des
tests
conduit à exécuter l'ensemble (ou une fraction déterminée) des instructions présentes dans le code.
L'ensemble des tests unitaires doit ĂȘtre rejouĂ© aprĂšs une modification du code afin de vĂ©rifier qu'il n'y a pas de
régressions
(l'apparition de nouveaux dysfonctionnements). L'emploi d'une « stratégie de test » particuliÚre
peut
limiter les tests à rejouer, par exemple : une analyse d'impact des modifications, corrélée à une preuve d'indépendance des modules, permet de cibler les cas de test unitaire à rejouer.
Un test doit correspondre aux spĂ©cifications de l'application, il faut donc Ă©crire les tests en premier puis les faire passer par la suite plutĂŽt que d'Ă©crire le code avant et de prendre le risque d'ĂȘtre influencĂ© par celui-ci lors de la rĂ©daction des tests
[
11
]
. Bob Martin
[
12
]
, grand défenseur de la méthode
TDD
, propose un
modĂšle
simple pour l'écriture des tests unitaires :
Ăcrire une fonction de test qui doit obtenir un rĂ©sultat dĂ©fini dans les spĂ©cifications. Ce code appelant un code qui n'existe pas encore, celui-ci doit Ă©chouer. Ceci a pour but de dĂ©finir une fonction qui teste « quelque chose ».
Ăcrire le code (le minimum de « quelque chose ») pour faire rĂ©ussir le test.
Une fois le test en succÚs, rajouter un autre test pour obtenir un résultat légÚrement différent, en faisant varier les entrées par exemple. Ce nouveau test fera faillir le code principal.
Modifier le code principal pour faire réussir les tests.
Recommencer, en éliminant et
refactorisant
les Ă©ventuelles redondances dans le code des tests. On refactorise en mĂȘme temps le code principal que le code des tests.
Un test unitaire doit tester une caractĂ©ristique et une seule. On ne dĂ©finit pas un «Â
scénario
 » de test complexe dans un test unitaire.
Il est déconseillé de tester les détails d'implémentation telles que les fonctions privées d'une classe, on se concentrera à tester les fonctions publiques, c'est-à -dire les interfaces avec lesquelles les acteurs extérieurs interagissent. Ainsi, on découple les tests de l'implémentation et on se concentre sur la vérification du comportement attendu tout en gardant une flexibilité sur la maniÚre d'arriver au résultat souhaité.
Les
mocks
sont des objets permettant de simuler un objet réel de façon contrÎlée. Dans certains cas, l'utilisation de mock est primordiale, pour un gain de temps de
couverture de code
, et de fiabilité des tests
[
13
]
pour simuler une
base de données
, un
service web
, etc., les interactions entre l'application et ces outils prennent du temps, l'utilisation de mock pour simuler leurs fonctionnements peut ĂȘtre un gain de temps considĂ©rable ;
certains cas d'erreurs sont trÚs difficile à reproduire, l'utilisation de mock permet ici de simuler une erreur pour pouvoir traiter ce cas et donc améliorer la couverture de code, par exemple le catch d'une exception ;
sans l'utilisation de mock, le test peut retourner une erreur ne provenant pas du code qui est testé (par exemple une base de données).
Cependant, une utilisation abusive de mock peut avoir l'effet inverse, notamment allonger le temps d'exécution des tests, rendre les tests compliqués à comprendre et à maintenir.
La plupart des
frameworks
de la famille
xUnit
permettent la gĂ©nĂ©ration des classes de test unitaire. Cependant ces frameworks ne fournissent que le squelette des classes. Les tests devront donc ĂȘtre Ă©crits par le dĂ©veloppeur.
La génération de tests unitaires est un sujet important pour les chercheurs et plusieurs conférences s'intéressent à cette problématique, telles que
International Symposium on Software Testing and Analysis
(ISSTA),
International Conference on Software Engineering
(ICSE) et
Automated Software Engineering
(ASE).
Lors d'une modification dans le code d'un programme, il se peut que certains tests ne passent plus ; dans ce cas, le dĂ©veloppeur doit dĂ©terminer si cela vient du code en lui-mĂȘme ou du test : si cela vient du test, le dĂ©veloppeur doit modifier son test car la suppression de celui-ci entraĂźnerait une augmentation des chances de rĂ©gression du programme. Certains chercheurs ont dĂ©veloppĂ© des outils pour rĂ©soudre ce problĂšme.
ReAssert
[
14
]
est un outil suggérant des réparations pour un test qui échoue, il analyse les tests à modifier et suggÚre des changements au développeur, si cette suggestion convient au développeur, il peut effectuer le changement en cliquant sur un bouton.
Les tests unitaires paramétrables sont des tests unitaires qui prennent des paramÚtres. Ils peuvent ensuite utiliser des outils comme QuickCheck pour générer des paramÚtres. Ces tests sont supportés par
JUnit
,
TestNG
et NUnit.
En s'appuyant sur des cas concrets d'entrée et sortie, la génération d'Oracle et sur la couverture de test pour minimiser les cas, des chercheurs ont réussi à générer des tests unitaires paramétrables
[
15
]
. Les résultats de cette méthode sont prometteurs.
Il existe une multitude de cadriciels (
framework
) permettant de réaliser facilement des tests unitaires. Il en existe dans les principaux
langages de programmation
. Par exemple
Test::More
[
16
]
pour le
Perl
.
Le terme gĂ©nĂ©rique «Â
xUnit
 » désigne un outil permettant de réaliser des tests unitaires dans un langage donné (dont l'initiale remplace « x » le plus souvent).
AUnit
[
17
]
pour
Ada
 ;
ASUnit
[
18
]
pour
ActionScript
 ;
Cppunit
[
19
]
pour
C++
 ;
CUnit
[
20
]
pour
C
 ;
DUnit pour
Delphi
 ;
FLEXunit pour
Adobe Flex
 ;
Google
Test
[
21
]
et Boost Test
[
22
]
pour
C++
 ;
HUnit
[
23
]
pour
Haskell
 ;
JSUnit
[
24
]
, QUnit
[
25
]
,
Unit.js
[
26
]
et Jest
[
27
]
pour
JavaScript
 ;
JUnit
[
28
]
et
TestNG
[
29
]
pour
Java
 ;
NUnit
[
30
]
pour
.NET
 ;
Microsoft
Unit Test
[
31
]
pour
.NET
 ;
xUnit
[
32
]
pour
.NET
 ;
NUnitASP
[
33
]
pour
ASP.NET
(support interrompu depuis le
31 janvier 2008
)Â ;
OUnit
[
34
]
pour
OCaml
 ;
OCunit pour
Objective C
 ;
PBUnit pour
PowerBuilder
 ;
PHPUnit
[
35
]
, SimpleTest
[
36
]
et Atoum
[
37
]
pour
PHP
 ;
plunit pour
Prolog
 ;
utPLSQL
[
38
]
pour
PL/SQL
 ;
Unittest et
PyUnit
pour
Python
 ;
Tape
pour
JavaScript
 ;
Test::Unit pour
Ruby
 ;
Test::More pour
Perl
 ;
Typemock
pour .NET, C++, C#. Avec Typemock vous pouvez travailler sur legacy code aussi.
SUnit
[
39
]
pour
Smalltalk
 ;
RPGUnit
[
40
]
pour RPGÂ ;
ScalaTest pour Scala
SASUnit
[
41
]
pour
SAS
.
Divers outils permettent l'automatisation des tests unitaires :
Le module TBrun de la suite d'outils
LDRA
 ;
Tessy (distribution :
Hitex Development Tools
/Allemagne).
Ponicode, génération de tests unitaires en Javascript
[
42
]
.
Cycle en V
Test
Extreme programming
Test Driven Development
â
(en)
Benington, Herbert D., «Â
Production of large computer programs
 »,
Proceedings of the Symposium on Advanced Programming Methods for Digital Computers, Washington, D.C., June 28-29, 1956
, Office of Naval Research, Department of the Navy,â
1956
,
p.
Â
15-28
â
a
et
b
H. D.
Benington
, «Â
Production of large computer programs
 »,
Proceedings of the 9th international conference on Software Engineering
, IEEE Computer Society Press, iCSE '87,â
1
er
mars 1987
,
p.
Â
299â310
(
ISBN
Â
978-0-89791-216-7
,
DOI
Â
10.5555/41765.41799
,
lire en ligne
, consulté le
3 avril 2024
)
â
Norman A.
Zimmerman
, «Â
System integration as a programming function
 »,
Proceedings of the 1969 24th national conference
, Association for Computing Machinery, aCM '69,â
26 août 1969
,
p.
Â
459â467
(
ISBN
Â
978-1-4503-7493-4
,
DOI
Â
10.1145/800195.805951
,
lire en ligne
, consulté le
3 avril 2024
)
â
(en)
Gouvernement des Etats Unis d'Amérique, Département de la Défence,
MIL-STD-483 Military standard: configuration management practices for systems, equipment, munitions, and computer programs
,
31 décembre 1970
, Section 3.4.7.2. "The contractor shall then code and test software Units, and enter the source and object code, and associated listings of each successfully tested Unit into the Developmental Configuration"
â
(en)
Michael F.
Tighe
, «Â
The value of a proper software quality assurance methodology
 »,
ACM SIGMETRICS Performance Evaluation Review
,
vol.
 7,
n
os
 3-4,â
novembre 1978
,
p.
Â
165â172
(
ISSN
Â
0163-5999
,
DOI
Â
10.1145/1007775.811118
,
lire en ligne
, consulté le
3 avril 2024
)
â
Camp Smalltalk SUnit
â
Simple Smalltalk Testing:With Patterns
, in
Smalltalk Report
octobre 1994, Kent Beck
â
(en)
Ward Cunningham, «Â
Testing Framework
 »
, sur
wiki.c2.com
.
â
Xunit, Martin Fowler
â
GNU Based Compilation System for Space Embedded Applications, Blondin, J. P. & Martignano, M., DASIA 98 - Data Systems in Aerospace, Proceedings of the conference held 25-28 May, 1998 in Athens, Greece, Edited by B. Kaldeich-SchĂŒ.rmann. ESA SP-422. Paris: European Space Agency, 1998., p.137, "1998ESASP.422..137B", page 138
http://adsbit.harvard.edu//full/1998ESASP.422..137B/0000138.000.html
â
Unit Testing Best Practices, Roy Osherove
.
â
Test First, bob Martin
.
â
Robert Martin,
When to Mock
.
â
(en)
Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan et Darko Marinov, «Â
ReAssert: a tool for repairing broken unit tests
 »,
ICSE
,â
2011
(
lire en ligne
)
.
â
(en)
Gordon Fraser et Andreas Zeller, «Â
Generating Parameterized Unit Tests
 »,
ISSTA
,â
2011
(
lire en ligne
)
.
â
Test::More sur CPAN
, entre autres
modules de tests
. Voir aussi les articles de l'association des
mongueurs de Perl
dans
Linux Magazine France
disponibles sur
http://articles.mongueurs.net/magazines
â
AUnit
â
AsUnit
â
CppUnit
et en
version 2
â
CUnit
â
GoogleTest
â
Boost.Test
â
HUnit
â
JsUnit
â
http://qunitjs.com
Unit testing for Javascript made by the jQuery Foundation
â
(en)
Unit JS
 : «Â
Unit testing framework for Javascript
 ».
â
(en)
«Â
Jest · đ Delightful JavaScript Testing
 », sur
jestjs.io
(consulté le
2 mars 2020
)
.
â
Welcome to The New JUnit.org! | JUnit.org
.
â
(en)
«Â
TestNG Documentation
 », sur
testng.org
(consulté le
21 mai 2024
)
.
â
NUnit - Home
â
(en-US)
erickson-doug
, «Â
Writing Unit Tests for the .NET Framework with the Microsoft Unit Test Framework for Managed Code - Visual Studio
 », sur
docs.microsoft.com
(consulté le
4 septembre 2018
)
.
â
(en)
«Â
Home > xUnit.net
 », sur
xunit.github.io
(consulté le
4 septembre 2018
)
.
â
NUnitAsp - ASP.NET unit testing
â
OUnit
â
PHPUnit - Trac
â
SimpleTest - Unit Testing for PHP
â
Atoum
â
utPLSQL
â
Simple Smalltalk Testing: With Patterns
â
http://rpgunit.sourceforge.net/
â
(en)
«Â
SASUnit
 », sur
SourceForge
(consulté le
24 février 2020
)
.
â
(en)
«Â
Ponicode - Quick and easy Javascript unit testing
 », sur
ponicode.com
(consulté le
23 juin 2020
)
.
v
 ·
m
Gestion de la
qualité logicielle
Indicateurs de qualité
(
ISO/CEI 9126
)
Capacité fonctionnelle (réponse aux
exigences
)
Fiabilité
Maintenabilité
Performance
Portabilité
Utilisabilité
Compréhension et contrÎle du
code source
Automatisation de test
Commentaires
Documentation
Inspection de produit
Programmation en binĂŽme
ou
en groupe
RĂšgles de codage
Revue de code
Tests
Acceptation
Intégration
Performance
Régression
Unitaire
Utilisateur
Validation
Métriques
Cohésion
Couplage
Couverture de code
Halstead
Indépendance fonctionnelle
Indice de maintenabilité
Ligne de code
Nombre cyclomatique
Point de fonction
Remaniements
Maintenance
Optimisation de code
Réusinage de code
(
RĂšgle de trois
)
Principes de
programmation
Encapsulation
GRASP
KISS
Loi de Déméter
Masquage de l'information
Ne vous répétez pas (DRY)
Patron de conception
Séparation des préoccupations
YAGNI
SOLID
Responsabilité unique
Ouvert/fermé
Substitution de Liskov
Ségrégation des interfaces
Inversion des dépendances
Mauvaises pratiques
Antipatterns
Attente active
Grosse boule de boue
Programmation spaghetti
(
syndrome
)
Réinventer la roue
Code smells
Duplication de code
God object
Voir aussi :
Génie logiciel
,
Software craftsmanship
,
Dégradation logicielle
Portail de lâinformatique |
| Markdown | [Aller au contenu](https://fr.wikipedia.org/wiki/Test_unitaire#bodyContent)
Menu principal
Menu principal
déplacer vers la barre latérale
masquer
Navigation
- [Page dâaccueil](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal "Accueil gĂ©nĂ©ral [z]")
- [Portails thématiques](https://fr.wikipedia.org/wiki/Portail:Accueil "Regroupements d'articles par thématiques")
- [Article au hasard](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Page_au_hasard "Affiche un article au hasard [x]")
- [Contact](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Contact "Qui contacter")
Contribuer
- [Débuter sur Wikipédia](https://fr.wikipedia.org/wiki/Aide:D%C3%A9buter "Guide pour apprendre à contribuer à Wikipédia")
- [Aide](https://fr.wikipedia.org/wiki/Aide:Accueil "AccĂšs Ă lâaide")
- [CommunautĂ©](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_de_la_communaut%C3%A9 "Ă propos du projet, ce que vous pouvez faire, oĂč trouver les informations")
- [Pages spéciales](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Pages_sp%C3%A9ciales "Outils pour contribuer à Wikipédia [q]")
- [Modifications récentes](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Modifications_r%C3%A9centes "Liste des modifications récentes sur le wiki [r]")
[  ](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal)
[Rechercher](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Recherche "Rechercher sur Wikipédia [f]")
Apparence
- [Faire un don](https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=fr.wikipedia.org&uselang=fr)
- [CrĂ©er un compte](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Cr%C3%A9er_un_compte&returnto=Test+unitaire "Nous vous encourageons Ă crĂ©er un compte utilisateur et vous connecterâŻ; ce nâest cependant pas obligatoire.")
- [Se connecter](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Connexion&returnto=Test+unitaire "Nous vous encourageons Ă vous connecterâŻ; ce nâest cependant pas obligatoire. [o]")
Outils personnels
- [Faire un don](https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=fr.wikipedia.org&uselang=fr)
- [CrĂ©er un compte](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Cr%C3%A9er_un_compte&returnto=Test+unitaire "Nous vous encourageons Ă crĂ©er un compte utilisateur et vous connecterâŻ; ce nâest cependant pas obligatoire.")
- [Se connecter](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Connexion&returnto=Test+unitaire "Nous vous encourageons Ă vous connecterâŻ; ce nâest cependant pas obligatoire. [o]")
## Sommaire
déplacer vers la barre latérale
masquer
- [Début](https://fr.wikipedia.org/wiki/Test_unitaire)
- [1 Origine et histoire](https://fr.wikipedia.org/wiki/Test_unitaire#Origine_et_histoire)
- [2 Utilité](https://fr.wikipedia.org/wiki/Test_unitaire#Utilit%C3%A9)
Afficher / masquer la sous-section Utilité
- [2\.1 Trouver les erreurs rapidement](https://fr.wikipedia.org/wiki/Test_unitaire#Trouver_les_erreurs_rapidement)
- [2\.2 Sécuriser la maintenance](https://fr.wikipedia.org/wiki/Test_unitaire#S%C3%A9curiser_la_maintenance)
- [2\.3 Documenter le code](https://fr.wikipedia.org/wiki/Test_unitaire#Documenter_le_code)
- [3 Fonctionnement](https://fr.wikipedia.org/wiki/Test_unitaire#Fonctionnement)
- [4 Utilisation](https://fr.wikipedia.org/wiki/Test_unitaire#Utilisation)
Afficher / masquer la sous-section Utilisation
- [4\.1 Commencer par les tests](https://fr.wikipedia.org/wiki/Test_unitaire#Commencer_par_les_tests)
- [4\.2 Utiliser des mocks](https://fr.wikipedia.org/wiki/Test_unitaire#Utiliser_des_mocks)
- [5 Génération](https://fr.wikipedia.org/wiki/Test_unitaire#G%C3%A9n%C3%A9ration)
Afficher / masquer la sous-section Génération
- [5\.1 Correction de test unitaire](https://fr.wikipedia.org/wiki/Test_unitaire#Correction_de_test_unitaire)
- [5\.2 Test unitaire paramétrable](https://fr.wikipedia.org/wiki/Test_unitaire#Test_unitaire_param%C3%A9trable)
- [6 Environnements de développement](https://fr.wikipedia.org/wiki/Test_unitaire#Environnements_de_d%C3%A9veloppement)
Afficher / masquer la sous-section Environnements de développement
- [6\.1 Frameworks xUnit](https://fr.wikipedia.org/wiki/Test_unitaire#Frameworks_xUnit)
- [7 Outils commerciaux](https://fr.wikipedia.org/wiki/Test_unitaire#Outils_commerciaux)
- [8 Articles connexes](https://fr.wikipedia.org/wiki/Test_unitaire#Articles_connexes)
- [9 Notes](https://fr.wikipedia.org/wiki/Test_unitaire#Notes)
Basculer la table des matiĂšres
# Test unitaire
29 langues
- [ۧÙŰč۱ۚÙŰ©](https://ar.wikipedia.org/wiki/%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1_%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A9 "ۧ۟ŰȘۚۧ۱ ۧÙÙŰۯ۩ â arabe")
- [ĐŃлгаŃŃĐșĐž](https://bg.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BD%D0%BE_%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B0%D0%BD%D0%B5 "ĐĐŸĐŒĐżĐŸĐœĐ”ĐœŃĐœĐŸ ŃĐ”ŃŃĐČĐ°ĐœĐ”Â â bulgare")
- [CatalĂ ](https://ca.wikipedia.org/wiki/Proves_unit%C3%A0ries "Proves unitĂ ries â catalan")
- [ÄeĆĄtina](https://cs.wikipedia.org/wiki/Unit_testing "Unit testing â tchĂšque")
- [Dansk](https://da.wikipedia.org/wiki/Unit_test "Unit test â danois")
- [Deutsch](https://de.wikipedia.org/wiki/Modultest "Modultest â allemand")
- [English](https://en.wikipedia.org/wiki/Unit_testing "Unit testing â anglais")
- [Español](https://es.wikipedia.org/wiki/Prueba_unitaria "Prueba unitaria â espagnol")
- [Eesti](https://et.wikipedia.org/wiki/%C3%9Chiktestimine "Ăhiktestimine â estonien")
- [Ùۧ۱۳Û](https://fa.wikipedia.org/wiki/%D8%A2%D8%B2%D9%85%D9%88%D9%86_%D9%88%D8%A7%D8%AD%D8%AF "ŰąŰČÙ
ÙÙ ÙۧŰŰŻÂ â persan")
- [Suomi](https://fi.wikipedia.org/wiki/Yksikk%C3%B6testaaminen "Yksikkötestaaminen â finnois")
- [ŚąŚŚšŚŚȘ](https://he.wikipedia.org/wiki/%D7%91%D7%93%D7%99%D7%A7%D7%95%D7%AA_%D7%99%D7%97%D7%99%D7%93%D7%94 "ŚŚŚŚ§ŚŚȘ ŚŚŚŚŚÂ â hĂ©breu")
- [Magyar](https://hu.wikipedia.org/wiki/Egys%C3%A9gtesztel%C3%A9s "EgysĂ©gtesztelĂ©s â hongrois")
- [Interlingua](https://ia.wikipedia.org/wiki/Proba_unitari "Proba unitari â interlingua")
- [Bahasa Indonesia](https://id.wikipedia.org/wiki/Pengujian_unit "Pengujian unit â indonĂ©sien")
- [Italiano](https://it.wikipedia.org/wiki/Unit_testing "Unit testing â italien")
- [æ„æŹèȘ](https://ja.wikipedia.org/wiki/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88 "ćäœăăčă â japonais")
- [íê”ìŽ](https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%9B_%ED%85%8C%EC%8A%A4%ED%8A%B8 "ì ë í
ì€ížÂ â corĂ©en")
- [Nederlands](https://nl.wikipedia.org/wiki/Unittesten "Unittesten â nĂ©erlandais")
- [Norsk bokmĂ„l](https://no.wikipedia.org/wiki/Enhetstesting "Enhetstesting â norvĂ©gien bokmĂ„l")
- [Polski](https://pl.wikipedia.org/wiki/Test_jednostkowy "Test jednostkowy â polonais")
- [PortuguĂȘs](https://pt.wikipedia.org/wiki/Teste_de_unidade "Teste de unidade â portugais")
- [Đ ŃŃŃĐșĐžĐč](https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 "ĐĐŸĐŽŃĐ»ŃĐœĐŸĐ” ŃĐ”ŃŃĐžŃĐŸĐČĐ°ĐœĐžĐ”Â â russe")
- [ĐĄŃĐżŃĐșĐž / srpski](https://sr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0%D1%80%D0%BD%D0%BE_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%B0%D1%9A%D0%B5 "ĐĐŸĐŽŃлаŃĐœĐŸ ŃĐ”ŃŃĐžŃаŃД â serbe")
- [àź€àźźàźżàźŽàŻ](https://ta.wikipedia.org/wiki/%E0%AE%93%E0%AE%B0%E0%AE%B2%E0%AE%95%E0%AF%81%E0%AE%9A%E0%AF%8D_%E0%AE%9A%E0%AF%8B%E0%AE%A4%E0%AE%A9%E0%AF%88 "àźàź°àźČàźàŻàźàŻ àźàŻàź€àź©àŻÂ â tamoul")
- [TĂŒrkçe](https://tr.wikipedia.org/wiki/Birim_testi "Birim testi â turc")
- [ĐŁĐșŃаŃĐœŃŃĐșа](https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F "ĐĐŸĐŽŃĐ»ŃĐœĐ” ŃĐ”ŃŃŃĐČĐ°ĐœĐœŃ â ukrainien")
- [Tiáșżng Viá»t](https://vi.wikipedia.org/wiki/Unit_testing "Unit testing â vietnamien")
- [äžæ](https://zh.wikipedia.org/wiki/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95 "ćć
æ”èŻÂ â chinois")
[Modifier les liens](https://www.wikidata.org/wiki/Special:EntityPage/Q907375#sitelinks-wikipedia "Modifier les liens interlangues")
- [Article](https://fr.wikipedia.org/wiki/Test_unitaire "Voir le contenu de la page [c]")
- [Discussion](https://fr.wikipedia.org/wiki/Discussion:Test_unitaire "Discussion au sujet de cette page de contenu [t]")
français
- [Lire](https://fr.wikipedia.org/wiki/Test_unitaire)
- [Modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit "Modifier cette page [v]")
- [Modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit "Modifier le wikicode de cette page [e]")
- [Voir lâhistorique](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=history "Historique des versions de cette page [h]")
Outils
Outils
déplacer vers la barre latérale
masquer
Actions
- [Lire](https://fr.wikipedia.org/wiki/Test_unitaire)
- [Modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit "Modifier cette page [v]")
- [Modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit "Modifier le wikicode de cette page [e]")
- [Voir lâhistorique](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=history)
Général
- [Pages liées](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Pages_li%C3%A9es/Test_unitaire "Liste des pages liées qui pointent sur celle-ci [j]")
- [Suivi des pages liées](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Suivi_des_liens/Test_unitaire "Liste des modifications récentes des pages appelées par celle-ci [k]")
- [Téléverser un fichier](https://fr.wikipedia.org/wiki/Aide:Importer_un_fichier "Téléverser des fichiers [u]")
- [Lien permanent](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&oldid=233485497 "Adresse permanente de cette version de cette page")
- [Informations sur la page](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=info "Davantage dâinformations sur cette page")
- [Citer cette page](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Citer&page=Test_unitaire&id=233485497&wpFormIdentifier=titleform "Informations sur la maniĂšre de citer cette page")
- [Obtenir l'URL raccourcie](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:UrlShortener&url=https%3A%2F%2Ffr.wikipedia.org%2Fwiki%2FTest_unitaire)
- [Télécharger le code QR](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:QrCode&url=https%3A%2F%2Ffr.wikipedia.org%2Fwiki%2FTest_unitaire)
Imprimer / exporter
- [Créer un livre](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:Livre&bookcmd=book_creator&referer=Test+unitaire)
- [Télécharger comme PDF](https://fr.wikipedia.org/w/index.php?title=Sp%C3%A9cial:DownloadAsPdf&page=Test_unitaire&action=show-download-screen)
- [Version imprimable](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&printable=yes "Version imprimable de cette page [p]")
Dans dâautres projets
- [Wikilivres](https://fr.wikibooks.org/wiki/Introduction_au_test_logiciel/Tests_unitaires)
- [ĂlĂ©ment Wikidata](https://www.wikidata.org/wiki/Special:EntityPage/Q907375 "Lien vers lâĂ©lĂ©ment dans le dĂ©pĂŽt de donnĂ©es connectĂ© [g]")
Apparence
déplacer vers la barre latérale
masquer
Un article de Wikipédia, l'encyclopédie libre.
[](https://fr.wikipedia.org/wiki/Aide:Homonymie "Aide:Homonymie")
Pour les articles homonymes, voir [Test](https://fr.wikipedia.org/wiki/Test "Test").
En [programmation informatique](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique"), le **test unitaire** (ou **TU**, voire ***UT*** pour *Unit Testing* en anglais) est une procédure permettant de vérifier le bon fonctionnement d'une partie précise d'un [logiciel](https://fr.wikipedia.org/wiki/Logiciel "Logiciel") ou d'une portion d'un [programme](https://fr.wikipedia.org/wiki/Programme_informatique "Programme informatique") (appelée « unité » ou « module »).
Dans les applications non critiques, l'écriture des tests unitaires a longtemps été considérée comme une tùche secondaire. Cependant, les méthodes [extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming") (XP) et [test driven development](https://fr.wikipedia.org/wiki/Test_driven_development "Test driven development") (TDD) ont remis les tests unitaires, appelés « tests du programmeur », au centre de l'activité de programmation.
## Origine et histoire
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=1 "Modifier la sectionâŻ: Origine et histoire") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=1 "Modifier le code source de la section : Origine et histoire")\]
Les tests unitaires, en tant que principe de tester séparément des parties plus élémentaires d'un logiciel complexe, remonte aux débuts de l'[ingénierie logicielle](https://fr.wikipedia.org/wiki/Ing%C3%A9nierie_logicielle "Ingénierie logicielle"). En Juin 1956, H.D. Benington présente en effet le projet [SAGE](https://fr.wikipedia.org/wiki/Semi-Automatic_Ground_Environment "Semi-Automatic Ground Environment") au symposium sur les méthodes de programmation avancée organisé par la [marine américaine](https://fr.wikipedia.org/wiki/United_States_Navy "United States Navy"). L'approche utilisée prévoyait à l'issue de la phase de codage une étape de « tests de paramÚtres » pour valider la conformité des sous-programmes et composants à leur spécifications, avant de procéder à un « test d'assemblage » de ces composants[\[1\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-1),[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2).
En 1964, une approche similaire est dĂ©crite pour les logiciels du [programme Mercury](https://fr.wikipedia.org/wiki/Programme_Mercury "Programme Mercury") : les unitĂ©s individuelles dĂ©veloppĂ©es par diffĂ©rentes organisations Ă©taient soumises Ă des "tests unitaires" avant d'ĂȘtre intĂ©grĂ©es entre elles. En 1969, les mĂ©thodologies de tests sont structurĂ©es encore davantage, avec des tests unitaires, des tests de composants, et des [tests d'intĂ©gration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intĂ©gration"), dans le but de valider des parties Ă©lĂ©mentaires du logiciel sĂ©parĂ©ment, puis de vĂ©rifier le bon fonctionnement des assemblages progressif en blocs plus larges[\[3\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-3). Des normes publiques adoptĂ©es Ă la fin des annĂ©es 60, telles que les standards militaires MIL-STD-483[\[4\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-4) et MIL-STD-490 de l'armĂ©e amĂ©ricaine contribuent Ă une large reconnaissance et adoption des tests unitaires au sein de gros projets.
Les tests unitaires étaient alors interactifs[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2), ou automatisés[\[5\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-5), utilisant soit des tests programmés ou des outils de capture et répétition automatisés. En 1994 [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") décrit un environnement cadre de test pour le langage [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk"), qui deviendra [SUnit](https://fr.wikipedia.org/w/index.php?title=SUnit&action=edit&redlink=1 "SUnit (page inexistante)")[\[6\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-6) par la suite[\[7\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-7),[\[8\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-8). En 1997, [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") rencontre [Erich Gamma](https://fr.wikipedia.org/wiki/Erich_Gamma "Erich Gamma") avec lequel il crée [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit") qui, par sa popularité, entraßnera la création de nombreux [frameworks](https://fr.wikipedia.org/wiki/Frameworks "Frameworks") de tests unitaires, cet ensemble se nomme [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit")[\[9\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-9).
Ă la mĂȘme Ă©poque, ATTOL Unit test est dĂ©veloppĂ©, puis utilisĂ© par [Sextant Avionique](https://fr.wikipedia.org/wiki/Sextant_Avionique "Sextant Avionique") en 1998[\[10\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-10)
## Utilité
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=2 "Modifier la sectionâŻ: UtilitĂ©") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=2 "Modifier le code source de la section : UtilitĂ©")\]
On Ă©crit un test pour confronter une rĂ©alisation Ă sa [spĂ©cification](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_fonctionnelle "SpĂ©cification fonctionnelle"). Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") dĂ©finit un critĂšre d'arrĂȘt (Ă©tat ou sorties Ă l'issue de l'exĂ©cution) et permet de statuer sur le succĂšs ou sur l'Ă©chec d'une vĂ©rification. GrĂące Ă la spĂ©cification, on est en mesure de faire correspondre un Ă©tat d'entrĂ©e donnĂ© Ă un rĂ©sultat ou Ă une sortie. Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") permet de vĂ©rifier que la relation d'entrĂ©e / sortie donnĂ©e par la spĂ©cification est bel et bien rĂ©alisĂ©e.
### Trouver les erreurs rapidement
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=3 "Modifier la sectionâŻ: Trouver les erreurs rapidement") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=3 "Modifier le code source de la section : Trouver les erreurs rapidement")\]
La mĂ©thode XP prĂ©conise d'Ă©crire les tests en mĂȘme temps, ou mĂȘme avant la fonction Ă tester ([Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development")). Ceci permet de dĂ©finir prĂ©cisĂ©ment l'interface du module Ă dĂ©velopper. Les tests sont exĂ©cutĂ©s durant tout le dĂ©veloppement, permettant de visualiser si le code fraĂźchement Ă©crit correspond au besoin.
### Sécuriser la maintenance
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=4 "Modifier la sectionâŻ: SĂ©curiser la maintenance") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=4 "Modifier le code source de la section : SĂ©curiser la maintenance")\]
Lors d'une modification d'un programme, les tests unitaires signalent les éventuelles [régressions](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de régression"). En effet, certains tests peuvent échouer à la suite d'une modification, il faut donc soit réécrire le test pour le faire correspondre aux nouvelles attentes, soit corriger l'erreur se situant dans le code.
### Documenter le code
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=5 "Modifier la sectionâŻ: Documenter le code") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=5 "Modifier le code source de la section : Documenter le code")\]
Les tests unitaires peuvent servir de complément à [l'API](https://fr.wikipedia.org/wiki/Interface_de_programmation "Interface de programmation"), il est trÚs utile de lire les tests pour comprendre comment s'utilise une méthode. De plus, il est possible que la documentation ne soit plus à jour, mais les tests eux correspondent à la réalité de l'application.
## Fonctionnement
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=6 "Modifier la sectionâŻ: Fonctionnement") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=6 "Modifier le code source de la section : Fonctionnement")\]
On définit généralement 4 phases dans l'exécution d'un test unitaire :
1. **Initialisation** (fonction `setUp`) : définition d'un environnement de test complÚtement reproductible (une [fixture](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture")).
2. **Exercice** : le module à tester est exécuté.
3. **VĂ©rification** (utilisation de fonctions `assert`) : comparaison des rĂ©sultats obtenus avec un vecteur de rĂ©sultat dĂ©fini. Ces tests dĂ©finissent le rĂ©sultat du test : SUCCĂS (`SUCCESS`) ou ĂCHEC (`FAILURE`). On peut Ă©galement dĂ©finir d'autres rĂ©sultats comme ĂVITĂ (`SKIPPED`).
4. **DĂ©sactivation** (fonction `tearDown`) : dĂ©sinstallation des [fixtures](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture") pour retrouver l'Ă©tat initial du systĂšme, dans le but de ne pas polluer les tests suivants. Tous les tests doivent ĂȘtre indĂ©pendants et reproductibles unitairement (quand exĂ©cutĂ©s seuls).
## Utilisation
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=7 "Modifier la sectionâŻ: Utilisation") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=7 "Modifier le code source de la section : Utilisation")\]
Il s'agit pour le programmeur de tester un [module](https://fr.wikipedia.org/wiki/Module_\(programmation\) "Module (programmation)"), indépendamment du reste du programme, ceci afin de s'assurer qu'il réponde aux [spécifications fonctionnelles](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_\(informatique\) "Spécification (informatique)") et qu'il fonctionne correctement en toutes circonstances. Cette vérification est considérée comme essentielle, en particulier dans les applications critiques. Elle s'accompagne couramment d'une vérification de la [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") (évaluation de la couverture structurelle), qui consiste à s'assurer que l'ensemble des [tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") conduit à exécuter l'ensemble (ou une fraction déterminée) des instructions présentes dans le code.
L'ensemble des tests unitaires doit ĂȘtre rejouĂ© aprĂšs une modification du code afin de vĂ©rifier qu'il n'y a pas de [rĂ©gressions](https://fr.wikipedia.org/wiki/Non-r%C3%A9gression "Non-rĂ©gression") (l'apparition de nouveaux dysfonctionnements). L'emploi d'une « stratĂ©gie de test » particuliĂšre *peut* limiter les tests Ă rejouer, par exemple : une analyse d'impact des modifications, corrĂ©lĂ©e Ă une preuve d'indĂ©pendance des modules, permet de cibler les cas de test unitaire Ă rejouer.
### Commencer par les tests
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=8 "Modifier la sectionâŻ: Commencer par les tests") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=8 "Modifier le code source de la section : Commencer par les tests")\]
Un test doit correspondre aux spĂ©cifications de l'application, il faut donc Ă©crire les tests en premier puis les faire passer par la suite plutĂŽt que d'Ă©crire le code avant et de prendre le risque d'ĂȘtre influencĂ© par celui-ci lors de la rĂ©daction des tests[\[11\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-11). Bob Martin[\[12\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-12), grand dĂ©fenseur de la mĂ©thode [TDD](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development"), propose un [modĂšle](https://fr.wikipedia.org/wiki/Pattern "Pattern") simple pour l'Ă©criture des tests unitaires :
1. Ăcrire une fonction de test qui doit obtenir un rĂ©sultat dĂ©fini dans les spĂ©cifications. Ce code appelant un code qui n'existe pas encore, celui-ci doit Ă©chouer. Ceci a pour but de dĂ©finir une fonction qui teste « quelque chose ».
2. Ăcrire le code (le minimum de « quelque chose ») pour faire rĂ©ussir le test.
3. Une fois le test en succÚs, rajouter un autre test pour obtenir un résultat légÚrement différent, en faisant varier les entrées par exemple. Ce nouveau test fera faillir le code principal.
4. Modifier le code principal pour faire réussir les tests.
5. Recommencer, en Ă©liminant et [refactorisant](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "RĂ©usinage de code") les Ă©ventuelles redondances dans le code des tests. On refactorise en mĂȘme temps le code principal que le code des tests.
6. Un test unitaire doit tester une caractéristique et une seule. On ne définit pas un « [scénario](https://fr.wikipedia.org/wiki/Sc%C3%A9nario_\(informatique\) "Scénario (informatique)") » de test complexe dans un test unitaire.
7. Il est déconseillé de tester les détails d'implémentation telles que les fonctions privées d'une classe, on se concentrera à tester les fonctions publiques, c'est-à -dire les interfaces avec lesquelles les acteurs extérieurs interagissent. Ainsi, on découple les tests de l'implémentation et on se concentre sur la vérification du comportement attendu tout en gardant une flexibilité sur la maniÚre d'arriver au résultat souhaité.
### Utiliser des mocks
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=9 "Modifier la sectionâŻ: Utiliser des mocks") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=9 "Modifier le code source de la section : Utiliser des mocks")\]
Les [mocks](https://fr.wikipedia.org/wiki/Mock_\(programmation_orient%C3%A9e_objet\) "Mock (programmation orientée objet)") sont des objets permettant de simuler un objet réel de façon contrÎlée. Dans certains cas, l'utilisation de mock est primordiale, pour un gain de temps de [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code"), et de fiabilité des tests[\[13\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-13)
- pour simuler une [base de donnĂ©es](https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es "Base de donnĂ©es"), un [service web](https://fr.wikipedia.org/wiki/Service_web "Service web"), etc., les interactions entre l'application et ces outils prennent du temps, l'utilisation de mock pour simuler leurs fonctionnements peut ĂȘtre un gain de temps considĂ©rable ;
- certains cas d'erreurs sont trÚs difficile à reproduire, l'utilisation de mock permet ici de simuler une erreur pour pouvoir traiter ce cas et donc améliorer la couverture de code, par exemple le catch d'une exception ;
- sans l'utilisation de mock, le test peut retourner une erreur ne provenant pas du code qui est testé (par exemple une base de données).
Cependant, une utilisation abusive de mock peut avoir l'effet inverse, notamment allonger le temps d'exécution des tests, rendre les tests compliqués à comprendre et à maintenir.
## Génération
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=10 "Modifier la sectionâŻ: GĂ©nĂ©ration") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=10 "Modifier le code source de la section : GĂ©nĂ©ration")\]
La plupart des [frameworks](https://fr.wikipedia.org/wiki/Framework "Framework") de la famille [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") permettent la gĂ©nĂ©ration des classes de test unitaire. Cependant ces frameworks ne fournissent que le squelette des classes. Les tests devront donc ĂȘtre Ă©crits par le dĂ©veloppeur.
La génération de tests unitaires est un sujet important pour les chercheurs et plusieurs conférences s'intéressent à cette problématique, telles que [International Symposium on Software Testing and Analysis](https://fr.wikipedia.org/w/index.php?title=International_Symposium_on_Software_Testing_and_Analysis&action=edit&redlink=1 "International Symposium on Software Testing and Analysis (page inexistante)") (ISSTA), [International Conference on Software Engineering](https://fr.wikipedia.org/w/index.php?title=International_Conference_on_Software_Engineering&action=edit&redlink=1 "International Conference on Software Engineering (page inexistante)") (ICSE) et [Automated Software Engineering](https://fr.wikipedia.org/w/index.php?title=Automated_Software_Engineering&action=edit&redlink=1 "Automated Software Engineering (page inexistante)") (ASE).
### Correction de test unitaire
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=11 "Modifier la sectionâŻ: Correction de test unitaire") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=11 "Modifier le code source de la section : Correction de test unitaire")\]
Lors d'une modification dans le code d'un programme, il se peut que certains tests ne passent plus ; dans ce cas, le dĂ©veloppeur doit dĂ©terminer si cela vient du code en lui-mĂȘme ou du test : si cela vient du test, le dĂ©veloppeur doit modifier son test car la suppression de celui-ci entraĂźnerait une augmentation des chances de rĂ©gression du programme. Certains chercheurs ont dĂ©veloppĂ© des outils pour rĂ©soudre ce problĂšme.
ReAssert[\[14\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-14) est un outil suggérant des réparations pour un test qui échoue, il analyse les tests à modifier et suggÚre des changements au développeur, si cette suggestion convient au développeur, il peut effectuer le changement en cliquant sur un bouton.
### Test unitaire paramétrable
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=12 "Modifier la sectionâŻ: Test unitaire paramĂ©trable") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=12 "Modifier le code source de la section : Test unitaire paramĂ©trable")\]
Les tests unitaires paramétrables sont des tests unitaires qui prennent des paramÚtres. Ils peuvent ensuite utiliser des outils comme QuickCheck pour générer des paramÚtres. Ces tests sont supportés par [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit"), [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG") et NUnit.
En s'appuyant sur des cas concrets d'entrée et sortie, la génération d'Oracle et sur la couverture de test pour minimiser les cas, des chercheurs ont réussi à générer des tests unitaires paramétrables[\[15\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-15). Les résultats de cette méthode sont prometteurs.
## Environnements de développement
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=13 "Modifier la sectionâŻ: Environnements de dĂ©veloppement") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=13 "Modifier le code source de la section : Environnements de dĂ©veloppement")\]
Il existe une multitude de cadriciels (*[framework](https://fr.wikipedia.org/wiki/Framework "Framework")*) permettant de réaliser facilement des tests unitaires. Il en existe dans les principaux [langages de programmation](https://fr.wikipedia.org/wiki/Langage_de_programmation "Langage de programmation"). Par exemple `Test::More`[\[16\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-16) pour le [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl").
### Frameworks xUnit
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=14 "Modifier la sectionâŻ: Frameworks xUnit") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=14 "Modifier le code source de la section : Frameworks xUnit")\]
Le terme générique « [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") » désigne un outil permettant de réaliser des tests unitaires dans un langage donné (dont l'initiale remplace « x » le plus souvent).
- AUnit[\[17\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-17) pour [Ada](https://fr.wikipedia.org/wiki/Ada_\(langage\) "Ada (langage)") ;
- ASUnit[\[18\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-18) pour [ActionScript](https://fr.wikipedia.org/wiki/ActionScript "ActionScript") ;
- Cppunit[\[19\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-19) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ;
- CUnit[\[20\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-20) pour [C](https://fr.wikipedia.org/wiki/C_\(langage\) "C (langage)") ;
- DUnit pour [Delphi](https://fr.wikipedia.org/wiki/Embarcadero_Delphi "Embarcadero Delphi") ;
- FLEXunit pour [Adobe Flex](https://fr.wikipedia.org/wiki/Adobe_Flex "Adobe Flex") ;
- [Google](https://fr.wikipedia.org/wiki/Google "Google") Test[\[21\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-21) et Boost Test[\[22\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-22) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ;
- HUnit[\[23\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-23) pour [Haskell](https://fr.wikipedia.org/wiki/Haskell "Haskell") ;
- JSUnit[\[24\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-24), QUnit[\[25\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-25), [Unit.js](https://fr.wikipedia.org/wiki/Unit.js "Unit.js")[\[26\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-26) et Jest[\[27\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-27) pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ;
- [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit")[\[28\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-28) et [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG")[\[29\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-29) pour [Java](https://fr.wikipedia.org/wiki/Java_\(langage\) "Java (langage)") ;
- NUnit[\[30\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-30) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ;
- [Microsoft](https://fr.wikipedia.org/wiki/Microsoft "Microsoft") Unit Test[\[31\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-31) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ;
- xUnit[\[32\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-32) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ;
- NUnitASP[\[33\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-33) pour [ASP.NET](https://fr.wikipedia.org/wiki/ASP.NET "ASP.NET") (support interrompu depuis le
31 janvier 2008
) ;
- OUnit[\[34\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-34) pour [OCaml](https://fr.wikipedia.org/wiki/OCaml "OCaml") ;
- OCunit pour [Objective C](https://fr.wikipedia.org/wiki/Objective_C "Objective C") ;
- PBUnit pour [PowerBuilder](https://fr.wikipedia.org/wiki/PowerBuilder "PowerBuilder") ;
- [PHPUnit](https://fr.wikipedia.org/wiki/PHPUnit "PHPUnit")[\[35\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-35), SimpleTest[\[36\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-36) et Atoum[\[37\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-37) pour [PHP](https://fr.wikipedia.org/wiki/PHP "PHP") ;
- plunit pour [Prolog](https://fr.wikipedia.org/wiki/Prolog "Prolog") ;
- utPLSQL[\[38\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-38) pour [PL/SQL](https://fr.wikipedia.org/wiki/PL/SQL "PL/SQL") ;
- Unittest et [PyUnit](https://fr.wikipedia.org/wiki/PyUnit "PyUnit") pour [Python](https://fr.wikipedia.org/wiki/Python_\(langage\) "Python (langage)") ;
- [Tape](https://fr.wikipedia.org/wiki/Tape_\(framework_de_tests_JavaScript\) "Tape (framework de tests JavaScript)") pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ;
- Test::Unit pour [Ruby](https://fr.wikipedia.org/wiki/Ruby "Ruby") ;
- Test::More pour [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl") ;
- [Typemock](https://fr.wikipedia.org/w/index.php?title=Typemock&action=edit&redlink=1 "Typemock (page inexistante)") pour .NET, C++, C\#. Avec Typemock vous pouvez travailler sur legacy code aussi.
- SUnit[\[39\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-39) pour [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk") ;
- RPGUnit[\[40\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-40) pour RPG ;
- ScalaTest pour Scala
- SASUnit[\[41\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-41) pour [SAS](https://fr.wikipedia.org/wiki/SAS_\(langage\) "SAS (langage)").
## Outils commerciaux
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=15 "Modifier la sectionâŻ: Outils commerciaux") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=15 "Modifier le code source de la section : Outils commerciaux")\]
Divers outils permettent l'automatisation des tests unitaires :
- Le module TBrun de la suite d'outils [LDRA](https://fr.wikipedia.org/wiki/LDRA "LDRA") ;
- Tessy (distribution : Hitex Development Tools/Allemagne).
- Ponicode, génération de tests unitaires en Javascript[\[42\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-42).
## Articles connexes
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=16 "Modifier la sectionâŻ: Articles connexes") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=16 "Modifier le code source de la section : Articles connexes")\]
Sur les autres projets Wikimedia :
- [Test unitaire](https://fr.wikibooks.org/wiki/Introduction_au_test_logiciel/Tests_unitaires "b:Introduction au test logiciel/Tests unitaires"), sur Wikibooks
- [Cycle en V](https://fr.wikipedia.org/wiki/Cycle_en_V "Cycle en V")
- [Test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)")
- [Extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming")
- [Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development")
## Notes
\[[modifier](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&veaction=edit§ion=17 "Modifier la sectionâŻ: Notes") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&action=edit§ion=17 "Modifier le code source de la section : Notes")\]
1. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-1)
(en)
Benington, Herbert D., «
Production of large computer programs
», *Proceedings of the Symposium on Advanced Programming Methods for Digital Computers, Washington, D.C., June 28-29, 1956*, Office of Naval Research, Department of the Navy,â
1956
,
p.
15-28
2. â [a](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-0) et [b](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-1)
H. D. Benington, «
Production of large computer programs
», *Proceedings of the 9th international conference on Software Engineering*, IEEE Computer Society Press, iCSE '87,â
1er
mars 1987
,
p.
299â310
([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-0-89791-216-7](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-0-89791-216-7 "Spécial:Ouvrages de référence/978-0-89791-216-7"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.5555/41765.41799](https://dx.doi.org/10.5555/41765.41799), [lire en ligne](https://dl.acm.org/doi/10.5555/41765.41799), consulté le
3 avril 2024
)
3. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-3)
Norman A. Zimmerman, «
System integration as a programming function
», *Proceedings of the 1969 24th national conference*, Association for Computing Machinery, aCM '69,â
26 août 1969
,
p.
459â467
([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-1-4503-7493-4](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-1-4503-7493-4 "Spécial:Ouvrages de référence/978-1-4503-7493-4"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/800195.805951](https://dx.doi.org/10.1145/800195.805951), [lire en ligne](https://dl.acm.org/doi/10.1145/800195.805951), consulté le
3 avril 2024
)
4. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-4)
(en)
Gouvernement des Etats Unis d'Amérique, Département de la Défence,
MIL-STD-483 Military standard: configuration management practices for systems, equipment, munitions, and computer programs
,
31 décembre 1970
, Section 3.4.7.2. "The contractor shall then code and test software Units, and enter the source and object code, and associated listings of each successfully tested Unit into the Developmental Configuration"
5. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-5)
(en)
Michael F. Tighe, «
The value of a proper software quality assurance methodology
», *ACM SIGMETRICS Performance Evaluation Review*,
vol.
7,
nos
3-4,â
novembre 1978
,
p.
165â172
([ISSN](https://fr.wikipedia.org/wiki/International_Standard_Serial_Number "International Standard Serial Number") [0163-5999](https://portal.issn.org/resource/issn/0163-5999), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/1007775.811118](https://dx.doi.org/10.1145/1007775.811118), [lire en ligne](https://dl.acm.org/doi/10.1145/1007775.811118), consulté le
3 avril 2024
)
6. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-6) [Camp Smalltalk SUnit](http://sunit.sourceforge.net/)
7. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-7) *[Simple Smalltalk Testing:With Patterns](http://www.xprogramming.com/testfram.htm)*, in *Smalltalk Report* octobre 1994, Kent Beck
8. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-8)
(en)
Ward Cunningham, «
[Testing Framework](http://wiki.c2.com/?TestingFramework)
» , sur wiki.c2.com
.
9. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-9) [Xunit, Martin Fowler](http://www.martinfowler.com/bliki/Xunit.html)
10. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-10) GNU Based Compilation System for Space Embedded Applications, Blondin, J. P. & Martignano, M., DASIA 98 - Data Systems in Aerospace, Proceedings of the conference held 25-28 May, 1998 in Athens, Greece, Edited by B. Kaldeich-SchĂŒ.rmann. ESA SP-422. Paris: European Space Agency, 1998., p.137, "1998ESASP.422..137B", page 138 <http://adsbit.harvard.edu//full/1998ESASP.422..137B/0000138.000.html>
11. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-11) [Unit Testing Best Practices, Roy Osherove](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique").
12. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-12) [Test First, bob Martin](http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html).
13. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-13) Robert Martin, *When to Mock*.
14. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-14)
(en)
Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan et Darko Marinov, «
*ReAssert: a tool for repairing broken unit tests*
», *ICSE*,â
2011
([lire en ligne](http://dl.acm.org/citation.cfm?doid=1985793.1985978))
.
15. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-15)
(en)
Gordon Fraser et Andreas Zeller, «
Generating Parameterized Unit Tests
», *ISSTA*,â
2011
([lire en ligne](http://dl.acm.org/citation.cfm?doid=2001420.2001464))
.
16. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-16) [Test::More sur CPAN](https://metacpan.org/module/Test::More), entre autres [modules de tests](https://metacpan.org/search?q=Test). Voir aussi les articles de l'association des *mongueurs de Perl* dans [Linux Magazine France](https://fr.wikipedia.org/wiki/Linux_Magazine_France "Linux Magazine France") disponibles sur <http://articles.mongueurs.net/magazines>
17. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-17) [AUnit](https://libre.adacore.com/aunit/main.html)
18. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-18) [AsUnit](http://www.asunit.org/)
19. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-19) [CppUnit](http://cppunit.sourceforge.net/) et en [version 2](https://launchpad.net/cppunit2)
20. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-20) [CUnit](http://cunit.sourceforge.net/)
21. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-21) [GoogleTest](https://code.google.com/p/googletest/)
22. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-22) [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/index.html)
23. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-23) [HUnit](http://hunit.sourceforge.net/)
24. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-24) [JsUnit](http://www.jsunit.net/)
25. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-25) <http://qunitjs.com> Unit testing for Javascript made by the jQuery Foundation
26. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-26)
(en)
[Unit JS](http://unitjs.com/) : « Unit testing framework for Javascript ».
27. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-27)
(en)
«
[Jest · đ Delightful JavaScript Testing](https://jestjs.io/)
», sur jestjs.io
(consulté le
2 mars 2020
)
.
28. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-28) [Welcome to The New JUnit.org! \| JUnit.org](http://junit.org/).
29. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-29)
(en)
«
[TestNG Documentation](http://testng.org/)
», sur testng.org
(consulté le
21 mai 2024
)
.
30. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-30) [NUnit - Home](http://www.nunit.org/)
31. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-31)
(en-US)
erickson-doug, «
[Writing Unit Tests for the .NET Framework with the Microsoft Unit Test Framework for Managed Code - Visual Studio](https://docs.microsoft.com/fr-fr/visualstudio/test/writing-unit-tests-for-the-dotnet-framework-with-the-microsoft-unit-test-framework-for-managed-code?view=vs-2015)
», sur docs.microsoft.com
(consulté le
4 septembre 2018
)
.
32. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-32)
(en)
«
[Home \> xUnit.net](https://xunit.github.io/)
», sur xunit.github.io
(consulté le
4 septembre 2018
)
.
33. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-33) [NUnitAsp - ASP.NET unit testing](http://nunitasp.sourceforge.net/)
34. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-34) [OUnit](http://ounit.forge.ocamlcore.org/)
35. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-35) [PHPUnit - Trac](https://www.phpunit.de/)
36. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-36) [SimpleTest - Unit Testing for PHP](http://www.simpletest.org/)
37. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-37) [Atoum](http://www.atoum.org/)
38. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-38) [utPLSQL](http://utplsql.sourceforge.net/)
39. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-39) [Simple Smalltalk Testing: With Patterns](http://www.xprogramming.com/testfram.htm)
40. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-40) <http://rpgunit.sourceforge.net/>
41. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-41)
(en)
«
[SASUnit](https://sourceforge.net/projects/sasunit/)
», sur SourceForge
(consulté le
24 février 2020
)
.
42. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-42)
(en)
«
[Ponicode - Quick and easy Javascript unit testing](https://ponicode.com/)
», sur ponicode.com
(consulté le
23 juin 2020
)
.
| [v](https://fr.wikipedia.org/wiki/Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle "ModÚle:Palette Qualité logicielle") · [m](https://fr.wikipedia.org/w/index.php?title=Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle&action=edit)Gestion de la [qualité logicielle](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle "Qualité logicielle") | |
|---|---|
| [Indicateurs de qualité](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle#Indicateurs_de_qualit%C3%A9_logicielle "Qualité logicielle") ([ISO/CEI 9126](https://fr.wikipedia.org/wiki/ISO/CEI_9126 "ISO/CEI 9126")) | Capacité fonctionnelle (réponse aux [exigences](https://fr.wikipedia.org/wiki/Exigence_\(ing%C3%A9nierie\) "Exigence (ingénierie)")) [Fiabilité](https://fr.wikipedia.org/wiki/Fiabilit%C3%A9 "Fiabilité") [Maintenabilité](https://fr.wikipedia.org/wiki/Maintenabilit%C3%A9 "Maintenabilité") [Performance](https://fr.wikipedia.org/wiki/Performances_\(informatique\) "Performances (informatique)") [Portabilité](https://fr.wikipedia.org/wiki/Portabilit%C3%A9_\(informatique\) "Portabilité (informatique)") [Utilisabilité](https://fr.wikipedia.org/wiki/Utilisabilit%C3%A9 "Utilisabilité") |
| Compréhension et contrÎle du [code source](https://fr.wikipedia.org/wiki/Code_source "Code source") | |
| | |
| [Tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") | [Acceptation](https://fr.wikipedia.org/wiki/Test_d%27acceptation "Test d'acceptation") [Intégration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intégration") [Performance](https://fr.wikipedia.org/wiki/Test_de_performance "Test de performance") [Régression](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de régression") [Unitaire]() [Utilisateur](https://fr.wikipedia.org/wiki/Test_utilisateur "Test utilisateur") [Validation](https://fr.wikipedia.org/wiki/Test_de_validation "Test de validation") |
| [Métriques](https://fr.wikipedia.org/wiki/M%C3%A9trique_\(logiciel\) "Métrique (logiciel)") | [Cohésion](https://fr.wikipedia.org/wiki/Coh%C3%A9sion_\(informatique\) "Cohésion (informatique)") [Couplage](https://fr.wikipedia.org/wiki/Couplage_\(informatique\) "Couplage (informatique)") [Couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") [Halstead](https://fr.wikipedia.org/wiki/M%C3%A9triques_d%27Halstead "Métriques d'Halstead") [Indépendance fonctionnelle](https://fr.wikipedia.org/wiki/Ind%C3%A9pendance_fonctionnelle "Indépendance fonctionnelle") [Indice de maintenabilité](https://fr.wikipedia.org/wiki/Indice_de_maintenabilit%C3%A9 "Indice de maintenabilité") [Ligne de code](https://fr.wikipedia.org/wiki/Ligne_de_code "Ligne de code") [Nombre cyclomatique](https://fr.wikipedia.org/wiki/Nombre_cyclomatique "Nombre cyclomatique") [Point de fonction](https://fr.wikipedia.org/wiki/Point_de_fonction "Point de fonction") |
| Remaniements | [Maintenance](https://fr.wikipedia.org/wiki/Maintenance_du_logiciel "Maintenance du logiciel") [Optimisation de code](https://fr.wikipedia.org/wiki/Optimisation_de_code "Optimisation de code") [Réusinage de code](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "Réusinage de code") ([RÚgle de trois](https://fr.wikipedia.org/wiki/R%C3%A8gle_de_trois_\(programmation_informatique\) "RÚgle de trois (programmation informatique)")) |
| Principes de [programmation](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique") | |
| | |
| [SOLID](https://fr.wikipedia.org/wiki/SOLID_\(informatique\) "SOLID (informatique)") | [Responsabilité unique](https://fr.wikipedia.org/wiki/Principe_de_responsabilit%C3%A9_unique "Principe de responsabilité unique") [Ouvert/fermé](https://fr.wikipedia.org/wiki/Principe_ouvert/ferm%C3%A9 "Principe ouvert/fermé") [Substitution de Liskov](https://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov "Principe de substitution de Liskov") [Ségrégation des interfaces](https://fr.wikipedia.org/wiki/Principe_de_s%C3%A9gr%C3%A9gation_des_interfaces "Principe de ségrégation des interfaces") [Inversion des dépendances](https://fr.wikipedia.org/wiki/Inversion_des_d%C3%A9pendances "Inversion des dépendances") |
| Mauvaises pratiques | |
| | |
| [Antipatterns](https://fr.wikipedia.org/wiki/Antipattern "Antipattern") | [Attente active](https://fr.wikipedia.org/wiki/Attente_active "Attente active") [Grosse boule de boue](https://fr.wikipedia.org/wiki/Grosse_boule_de_boue "Grosse boule de boue") [Programmation spaghetti](https://fr.wikipedia.org/wiki/Programmation_spaghetti "Programmation spaghetti") ([syndrome](https://fr.wikipedia.org/wiki/Syndrome_du_plat_de_spaghettis "Syndrome du plat de spaghettis")) [Réinventer la roue](https://fr.wikipedia.org/wiki/R%C3%A9inventer_la_roue "Réinventer la roue") |
| | |
| [Code smells](https://fr.wikipedia.org/wiki/Code_smell "Code smell") | [Duplication de code](https://fr.wikipedia.org/wiki/Duplication_de_code "Duplication de code") [God object](https://fr.wikipedia.org/wiki/God_object "God object") |
| Voir aussi : [Génie logiciel](https://fr.wikipedia.org/wiki/G%C3%A9nie_logiciel "Génie logiciel"), [Software craftsmanship](https://fr.wikipedia.org/wiki/Software_craftsmanship "Software craftsmanship"), [Dégradation logicielle](https://fr.wikipedia.org/wiki/D%C3%A9gradation_logicielle "Dégradation logicielle") | |
- [](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail de lâinformatique") [Portail de lâinformatique](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail:Informatique")

Ce document provient de « <https://fr.wikipedia.org/w/index.php?title=Test_unitaire&oldid=233485497> ».
[Catégorie](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Accueil "Catégorie:Accueil") :
- [Test logiciel](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Test_logiciel "Catégorie:Test logiciel")
Catégories cachées :
- [Portail:Informatique/Articles liés](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Portail:Informatique/Articles_li%C3%A9s "Catégorie:Portail:Informatique/Articles liés")
- [Portail:Technologies/Articles liés](https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Portail:Technologies/Articles_li%C3%A9s "Catégorie:Portail:Technologies/Articles liés")
- La derniÚre modification de cette page a été faite le 21 février 2026 à 12:01.
- [Droit d'auteur](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Citation_et_r%C3%A9utilisation_du_contenu_de_Wikip%C3%A9dia "WikipĂ©dia:Citation et rĂ©utilisation du contenu de WikipĂ©dia") : les textes sont disponibles sous [licence Creative Commons attribution, partage dans les mĂȘmes conditions](https://creativecommons.org/licenses/by-sa/4.0/deed.fr) ; dâautres conditions peuvent sâappliquer. Voyez les [conditions dâutilisation](https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/fr) pour plus de dĂ©tails, ainsi que les [crĂ©dits graphiques](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Cr%C3%A9dits_graphiques "WikipĂ©dia:CrĂ©dits graphiques"). En cas de rĂ©utilisation des textes de cette page, voyez [comment citer les auteurs et mentionner la licence](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Citer/Test_unitaire "SpĂ©cial:Citer/Test unitaire").
WikipediaÂź est une marque dĂ©posĂ©e de la [Wikimedia Foundation, Inc.](https://wikimediafoundation.org/), organisation de bienfaisance rĂ©gie par le paragraphe [501(c)(3)](https://fr.wikipedia.org/wiki/501c "501c") du code fiscal des Ătats-Unis.
- [Politique de confidentialité](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/fr)
- [à propos de Wikipédia](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:%C3%80_propos_de_Wikip%C3%A9dia)
- [Avertissements](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Avertissements_g%C3%A9n%C3%A9raux)
- [Contact](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Contact)
- [Contacts juridiques & sécurité](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Legal:Wikimedia_Foundation_Legal_and_Safety_Contact_Information)
- [Code de conduite](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct)
- [Développeurs](https://developer.wikimedia.org/)
- [Statistiques](https://stats.wikimedia.org/#/fr.wikipedia.org)
- [Déclaration sur les témoins (cookies)](https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement)
- [Version mobile](https://fr.wikipedia.org/w/index.php?title=Test_unitaire&mobileaction=toggle_view_mobile)
- [](https://www.wikimedia.org/)
- [](https://www.mediawiki.org/)
Rechercher
Basculer la table des matiĂšres
Test unitaire
29 langues
[Ajouter un sujet](https://fr.wikipedia.org/wiki/Test_unitaire) |
| Readable Markdown | Un article de Wikipédia, l'encyclopédie libre.
En [programmation informatique](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique"), le **test unitaire** (ou **TU**, voire ***UT*** pour *Unit Testing* en anglais) est une procédure permettant de vérifier le bon fonctionnement d'une partie précise d'un [logiciel](https://fr.wikipedia.org/wiki/Logiciel "Logiciel") ou d'une portion d'un [programme](https://fr.wikipedia.org/wiki/Programme_informatique "Programme informatique") (appelée « unité » ou « module »).
Dans les applications non critiques, l'écriture des tests unitaires a longtemps été considérée comme une tùche secondaire. Cependant, les méthodes [extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming") (XP) et [test driven development](https://fr.wikipedia.org/wiki/Test_driven_development "Test driven development") (TDD) ont remis les tests unitaires, appelés « tests du programmeur », au centre de l'activité de programmation.
Les tests unitaires, en tant que principe de tester séparément des parties plus élémentaires d'un logiciel complexe, remonte aux débuts de l'[ingénierie logicielle](https://fr.wikipedia.org/wiki/Ing%C3%A9nierie_logicielle "Ingénierie logicielle"). En Juin 1956, H.D. Benington présente en effet le projet [SAGE](https://fr.wikipedia.org/wiki/Semi-Automatic_Ground_Environment "Semi-Automatic Ground Environment") au symposium sur les méthodes de programmation avancée organisé par la [marine américaine](https://fr.wikipedia.org/wiki/United_States_Navy "United States Navy"). L'approche utilisée prévoyait à l'issue de la phase de codage une étape de « tests de paramÚtres » pour valider la conformité des sous-programmes et composants à leur spécifications, avant de procéder à un « test d'assemblage » de ces composants[\[1\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-1),[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2).
En 1964, une approche similaire est dĂ©crite pour les logiciels du [programme Mercury](https://fr.wikipedia.org/wiki/Programme_Mercury "Programme Mercury") : les unitĂ©s individuelles dĂ©veloppĂ©es par diffĂ©rentes organisations Ă©taient soumises Ă des "tests unitaires" avant d'ĂȘtre intĂ©grĂ©es entre elles. En 1969, les mĂ©thodologies de tests sont structurĂ©es encore davantage, avec des tests unitaires, des tests de composants, et des [tests d'intĂ©gration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intĂ©gration"), dans le but de valider des parties Ă©lĂ©mentaires du logiciel sĂ©parĂ©ment, puis de vĂ©rifier le bon fonctionnement des assemblages progressif en blocs plus larges[\[3\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-3). Des normes publiques adoptĂ©es Ă la fin des annĂ©es 60, telles que les standards militaires MIL-STD-483[\[4\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-4) et MIL-STD-490 de l'armĂ©e amĂ©ricaine contribuent Ă une large reconnaissance et adoption des tests unitaires au sein de gros projets.
Les tests unitaires étaient alors interactifs[\[2\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-:0-2), ou automatisés[\[5\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-5), utilisant soit des tests programmés ou des outils de capture et répétition automatisés. En 1994 [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") décrit un environnement cadre de test pour le langage [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk"), qui deviendra [SUnit](https://fr.wikipedia.org/w/index.php?title=SUnit&action=edit&redlink=1 "SUnit (page inexistante)")[\[6\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-6) par la suite[\[7\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-7),[\[8\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-8). En 1997, [Kent Beck](https://fr.wikipedia.org/wiki/Kent_Beck "Kent Beck") rencontre [Erich Gamma](https://fr.wikipedia.org/wiki/Erich_Gamma "Erich Gamma") avec lequel il crée [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit") qui, par sa popularité, entraßnera la création de nombreux [frameworks](https://fr.wikipedia.org/wiki/Frameworks "Frameworks") de tests unitaires, cet ensemble se nomme [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit")[\[9\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-9).
Ă la mĂȘme Ă©poque, ATTOL Unit test est dĂ©veloppĂ©, puis utilisĂ© par [Sextant Avionique](https://fr.wikipedia.org/wiki/Sextant_Avionique "Sextant Avionique") en 1998[\[10\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-10)
On Ă©crit un test pour confronter une rĂ©alisation Ă sa [spĂ©cification](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_fonctionnelle "SpĂ©cification fonctionnelle"). Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") dĂ©finit un critĂšre d'arrĂȘt (Ă©tat ou sorties Ă l'issue de l'exĂ©cution) et permet de statuer sur le succĂšs ou sur l'Ă©chec d'une vĂ©rification. GrĂące Ă la spĂ©cification, on est en mesure de faire correspondre un Ă©tat d'entrĂ©e donnĂ© Ă un rĂ©sultat ou Ă une sortie. Le [test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") permet de vĂ©rifier que la relation d'entrĂ©e / sortie donnĂ©e par la spĂ©cification est bel et bien rĂ©alisĂ©e.
La mĂ©thode XP prĂ©conise d'Ă©crire les tests en mĂȘme temps, ou mĂȘme avant la fonction Ă tester ([Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development")). Ceci permet de dĂ©finir prĂ©cisĂ©ment l'interface du module Ă dĂ©velopper. Les tests sont exĂ©cutĂ©s durant tout le dĂ©veloppement, permettant de visualiser si le code fraĂźchement Ă©crit correspond au besoin.
Lors d'une modification d'un programme, les tests unitaires signalent les éventuelles [régressions](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de régression"). En effet, certains tests peuvent échouer à la suite d'une modification, il faut donc soit réécrire le test pour le faire correspondre aux nouvelles attentes, soit corriger l'erreur se situant dans le code.
Les tests unitaires peuvent servir de complément à [l'API](https://fr.wikipedia.org/wiki/Interface_de_programmation "Interface de programmation"), il est trÚs utile de lire les tests pour comprendre comment s'utilise une méthode. De plus, il est possible que la documentation ne soit plus à jour, mais les tests eux correspondent à la réalité de l'application.
On définit généralement 4 phases dans l'exécution d'un test unitaire :
1. **Initialisation** (fonction `setUp`) : définition d'un environnement de test complÚtement reproductible (une [fixture](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture")).
2. **Exercice** : le module à tester est exécuté.
3. **VĂ©rification** (utilisation de fonctions `assert`) : comparaison des rĂ©sultats obtenus avec un vecteur de rĂ©sultat dĂ©fini. Ces tests dĂ©finissent le rĂ©sultat du test : SUCCĂS (`SUCCESS`) ou ĂCHEC (`FAILURE`). On peut Ă©galement dĂ©finir d'autres rĂ©sultats comme ĂVITĂ (`SKIPPED`).
4. **DĂ©sactivation** (fonction `tearDown`) : dĂ©sinstallation des [fixtures](https://fr.wikipedia.org/wiki/Test_fixture "Test fixture") pour retrouver l'Ă©tat initial du systĂšme, dans le but de ne pas polluer les tests suivants. Tous les tests doivent ĂȘtre indĂ©pendants et reproductibles unitairement (quand exĂ©cutĂ©s seuls).
Il s'agit pour le programmeur de tester un [module](https://fr.wikipedia.org/wiki/Module_\(programmation\) "Module (programmation)"), indépendamment du reste du programme, ceci afin de s'assurer qu'il réponde aux [spécifications fonctionnelles](https://fr.wikipedia.org/wiki/Sp%C3%A9cification_\(informatique\) "Spécification (informatique)") et qu'il fonctionne correctement en toutes circonstances. Cette vérification est considérée comme essentielle, en particulier dans les applications critiques. Elle s'accompagne couramment d'une vérification de la [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") (évaluation de la couverture structurelle), qui consiste à s'assurer que l'ensemble des [tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") conduit à exécuter l'ensemble (ou une fraction déterminée) des instructions présentes dans le code.
L'ensemble des tests unitaires doit ĂȘtre rejouĂ© aprĂšs une modification du code afin de vĂ©rifier qu'il n'y a pas de [rĂ©gressions](https://fr.wikipedia.org/wiki/Non-r%C3%A9gression "Non-rĂ©gression") (l'apparition de nouveaux dysfonctionnements). L'emploi d'une « stratĂ©gie de test » particuliĂšre *peut* limiter les tests Ă rejouer, par exemple : une analyse d'impact des modifications, corrĂ©lĂ©e Ă une preuve d'indĂ©pendance des modules, permet de cibler les cas de test unitaire Ă rejouer.
Un test doit correspondre aux spĂ©cifications de l'application, il faut donc Ă©crire les tests en premier puis les faire passer par la suite plutĂŽt que d'Ă©crire le code avant et de prendre le risque d'ĂȘtre influencĂ© par celui-ci lors de la rĂ©daction des tests[\[11\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-11). Bob Martin[\[12\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-12), grand dĂ©fenseur de la mĂ©thode [TDD](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development"), propose un [modĂšle](https://fr.wikipedia.org/wiki/Pattern "Pattern") simple pour l'Ă©criture des tests unitaires :
1. Ăcrire une fonction de test qui doit obtenir un rĂ©sultat dĂ©fini dans les spĂ©cifications. Ce code appelant un code qui n'existe pas encore, celui-ci doit Ă©chouer. Ceci a pour but de dĂ©finir une fonction qui teste « quelque chose ».
2. Ăcrire le code (le minimum de « quelque chose ») pour faire rĂ©ussir le test.
3. Une fois le test en succÚs, rajouter un autre test pour obtenir un résultat légÚrement différent, en faisant varier les entrées par exemple. Ce nouveau test fera faillir le code principal.
4. Modifier le code principal pour faire réussir les tests.
5. Recommencer, en Ă©liminant et [refactorisant](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "RĂ©usinage de code") les Ă©ventuelles redondances dans le code des tests. On refactorise en mĂȘme temps le code principal que le code des tests.
6. Un test unitaire doit tester une caractéristique et une seule. On ne définit pas un « [scénario](https://fr.wikipedia.org/wiki/Sc%C3%A9nario_\(informatique\) "Scénario (informatique)") » de test complexe dans un test unitaire.
7. Il est déconseillé de tester les détails d'implémentation telles que les fonctions privées d'une classe, on se concentrera à tester les fonctions publiques, c'est-à -dire les interfaces avec lesquelles les acteurs extérieurs interagissent. Ainsi, on découple les tests de l'implémentation et on se concentre sur la vérification du comportement attendu tout en gardant une flexibilité sur la maniÚre d'arriver au résultat souhaité.
Les [mocks](https://fr.wikipedia.org/wiki/Mock_\(programmation_orient%C3%A9e_objet\) "Mock (programmation orientée objet)") sont des objets permettant de simuler un objet réel de façon contrÎlée. Dans certains cas, l'utilisation de mock est primordiale, pour un gain de temps de [couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code"), et de fiabilité des tests[\[13\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-13)
- pour simuler une [base de donnĂ©es](https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es "Base de donnĂ©es"), un [service web](https://fr.wikipedia.org/wiki/Service_web "Service web"), etc., les interactions entre l'application et ces outils prennent du temps, l'utilisation de mock pour simuler leurs fonctionnements peut ĂȘtre un gain de temps considĂ©rable ;
- certains cas d'erreurs sont trÚs difficile à reproduire, l'utilisation de mock permet ici de simuler une erreur pour pouvoir traiter ce cas et donc améliorer la couverture de code, par exemple le catch d'une exception ;
- sans l'utilisation de mock, le test peut retourner une erreur ne provenant pas du code qui est testé (par exemple une base de données).
Cependant, une utilisation abusive de mock peut avoir l'effet inverse, notamment allonger le temps d'exécution des tests, rendre les tests compliqués à comprendre et à maintenir.
La plupart des [frameworks](https://fr.wikipedia.org/wiki/Framework "Framework") de la famille [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") permettent la gĂ©nĂ©ration des classes de test unitaire. Cependant ces frameworks ne fournissent que le squelette des classes. Les tests devront donc ĂȘtre Ă©crits par le dĂ©veloppeur.
La génération de tests unitaires est un sujet important pour les chercheurs et plusieurs conférences s'intéressent à cette problématique, telles que [International Symposium on Software Testing and Analysis](https://fr.wikipedia.org/w/index.php?title=International_Symposium_on_Software_Testing_and_Analysis&action=edit&redlink=1 "International Symposium on Software Testing and Analysis (page inexistante)") (ISSTA), [International Conference on Software Engineering](https://fr.wikipedia.org/w/index.php?title=International_Conference_on_Software_Engineering&action=edit&redlink=1 "International Conference on Software Engineering (page inexistante)") (ICSE) et [Automated Software Engineering](https://fr.wikipedia.org/w/index.php?title=Automated_Software_Engineering&action=edit&redlink=1 "Automated Software Engineering (page inexistante)") (ASE).
Lors d'une modification dans le code d'un programme, il se peut que certains tests ne passent plus ; dans ce cas, le dĂ©veloppeur doit dĂ©terminer si cela vient du code en lui-mĂȘme ou du test : si cela vient du test, le dĂ©veloppeur doit modifier son test car la suppression de celui-ci entraĂźnerait une augmentation des chances de rĂ©gression du programme. Certains chercheurs ont dĂ©veloppĂ© des outils pour rĂ©soudre ce problĂšme.
ReAssert[\[14\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-14) est un outil suggérant des réparations pour un test qui échoue, il analyse les tests à modifier et suggÚre des changements au développeur, si cette suggestion convient au développeur, il peut effectuer le changement en cliquant sur un bouton.
Les tests unitaires paramétrables sont des tests unitaires qui prennent des paramÚtres. Ils peuvent ensuite utiliser des outils comme QuickCheck pour générer des paramÚtres. Ces tests sont supportés par [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit"), [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG") et NUnit.
En s'appuyant sur des cas concrets d'entrée et sortie, la génération d'Oracle et sur la couverture de test pour minimiser les cas, des chercheurs ont réussi à générer des tests unitaires paramétrables[\[15\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-15). Les résultats de cette méthode sont prometteurs.
Il existe une multitude de cadriciels (*[framework](https://fr.wikipedia.org/wiki/Framework "Framework")*) permettant de réaliser facilement des tests unitaires. Il en existe dans les principaux [langages de programmation](https://fr.wikipedia.org/wiki/Langage_de_programmation "Langage de programmation"). Par exemple `Test::More`[\[16\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-16) pour le [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl").
Le terme générique « [xUnit](https://fr.wikipedia.org/wiki/XUnit "XUnit") » désigne un outil permettant de réaliser des tests unitaires dans un langage donné (dont l'initiale remplace « x » le plus souvent).
- AUnit[\[17\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-17) pour [Ada](https://fr.wikipedia.org/wiki/Ada_\(langage\) "Ada (langage)") ;
- ASUnit[\[18\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-18) pour [ActionScript](https://fr.wikipedia.org/wiki/ActionScript "ActionScript") ;
- Cppunit[\[19\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-19) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ;
- CUnit[\[20\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-20) pour [C](https://fr.wikipedia.org/wiki/C_\(langage\) "C (langage)") ;
- DUnit pour [Delphi](https://fr.wikipedia.org/wiki/Embarcadero_Delphi "Embarcadero Delphi") ;
- FLEXunit pour [Adobe Flex](https://fr.wikipedia.org/wiki/Adobe_Flex "Adobe Flex") ;
- [Google](https://fr.wikipedia.org/wiki/Google "Google") Test[\[21\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-21) et Boost Test[\[22\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-22) pour [C++](https://fr.wikipedia.org/wiki/C%2B%2B "C++") ;
- HUnit[\[23\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-23) pour [Haskell](https://fr.wikipedia.org/wiki/Haskell "Haskell") ;
- JSUnit[\[24\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-24), QUnit[\[25\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-25), [Unit.js](https://fr.wikipedia.org/wiki/Unit.js "Unit.js")[\[26\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-26) et Jest[\[27\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-27) pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ;
- [JUnit](https://fr.wikipedia.org/wiki/JUnit "JUnit")[\[28\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-28) et [TestNG](https://fr.wikipedia.org/wiki/TestNG "TestNG")[\[29\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-29) pour [Java](https://fr.wikipedia.org/wiki/Java_\(langage\) "Java (langage)") ;
- NUnit[\[30\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-30) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ;
- [Microsoft](https://fr.wikipedia.org/wiki/Microsoft "Microsoft") Unit Test[\[31\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-31) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ;
- xUnit[\[32\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-32) pour [.NET](https://fr.wikipedia.org/wiki/Microsoft_.NET "Microsoft .NET") ;
- NUnitASP[\[33\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-33) pour [ASP.NET](https://fr.wikipedia.org/wiki/ASP.NET "ASP.NET") (support interrompu depuis le
31 janvier 2008
) ;
- OUnit[\[34\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-34) pour [OCaml](https://fr.wikipedia.org/wiki/OCaml "OCaml") ;
- OCunit pour [Objective C](https://fr.wikipedia.org/wiki/Objective_C "Objective C") ;
- PBUnit pour [PowerBuilder](https://fr.wikipedia.org/wiki/PowerBuilder "PowerBuilder") ;
- [PHPUnit](https://fr.wikipedia.org/wiki/PHPUnit "PHPUnit")[\[35\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-35), SimpleTest[\[36\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-36) et Atoum[\[37\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-37) pour [PHP](https://fr.wikipedia.org/wiki/PHP "PHP") ;
- plunit pour [Prolog](https://fr.wikipedia.org/wiki/Prolog "Prolog") ;
- utPLSQL[\[38\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-38) pour [PL/SQL](https://fr.wikipedia.org/wiki/PL/SQL "PL/SQL") ;
- Unittest et [PyUnit](https://fr.wikipedia.org/wiki/PyUnit "PyUnit") pour [Python](https://fr.wikipedia.org/wiki/Python_\(langage\) "Python (langage)") ;
- [Tape](https://fr.wikipedia.org/wiki/Tape_\(framework_de_tests_JavaScript\) "Tape (framework de tests JavaScript)") pour [JavaScript](https://fr.wikipedia.org/wiki/JavaScript "JavaScript") ;
- Test::Unit pour [Ruby](https://fr.wikipedia.org/wiki/Ruby "Ruby") ;
- Test::More pour [Perl](https://fr.wikipedia.org/wiki/Langage_Perl "Langage Perl") ;
- [Typemock](https://fr.wikipedia.org/w/index.php?title=Typemock&action=edit&redlink=1 "Typemock (page inexistante)") pour .NET, C++, C\#. Avec Typemock vous pouvez travailler sur legacy code aussi.
- SUnit[\[39\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-39) pour [Smalltalk](https://fr.wikipedia.org/wiki/Smalltalk "Smalltalk") ;
- RPGUnit[\[40\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-40) pour RPG ;
- ScalaTest pour Scala
- SASUnit[\[41\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-41) pour [SAS](https://fr.wikipedia.org/wiki/SAS_\(langage\) "SAS (langage)").
Divers outils permettent l'automatisation des tests unitaires :
- Le module TBrun de la suite d'outils [LDRA](https://fr.wikipedia.org/wiki/LDRA "LDRA") ;
- Tessy (distribution : Hitex Development Tools/Allemagne).
- Ponicode, génération de tests unitaires en Javascript[\[42\]](https://fr.wikipedia.org/wiki/Test_unitaire#cite_note-42).
- [Cycle en V](https://fr.wikipedia.org/wiki/Cycle_en_V "Cycle en V")
- [Test](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)")
- [Extreme programming](https://fr.wikipedia.org/wiki/Extreme_programming "Extreme programming")
- [Test Driven Development](https://fr.wikipedia.org/wiki/Test_Driven_Development "Test Driven Development")
1. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-1)
(en)
Benington, Herbert D., «
Production of large computer programs
», *Proceedings of the Symposium on Advanced Programming Methods for Digital Computers, Washington, D.C., June 28-29, 1956*, Office of Naval Research, Department of the Navy,â
1956
,
p.
15-28
2. â [a](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-0) et [b](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-:0_2-1)
H. D. Benington, «
Production of large computer programs
», *Proceedings of the 9th international conference on Software Engineering*, IEEE Computer Society Press, iCSE '87,â
1er
mars 1987
,
p.
299â310
([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-0-89791-216-7](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-0-89791-216-7 "Spécial:Ouvrages de référence/978-0-89791-216-7"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.5555/41765.41799](https://dx.doi.org/10.5555/41765.41799), [lire en ligne](https://dl.acm.org/doi/10.5555/41765.41799), consulté le
3 avril 2024
)
3. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-3)
Norman A. Zimmerman, «
System integration as a programming function
», *Proceedings of the 1969 24th national conference*, Association for Computing Machinery, aCM '69,â
26 août 1969
,
p.
459â467
([ISBN](https://fr.wikipedia.org/wiki/International_Standard_Book_Number "International Standard Book Number") [978-1-4503-7493-4](https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Ouvrages_de_r%C3%A9f%C3%A9rence/978-1-4503-7493-4 "Spécial:Ouvrages de référence/978-1-4503-7493-4"), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/800195.805951](https://dx.doi.org/10.1145/800195.805951), [lire en ligne](https://dl.acm.org/doi/10.1145/800195.805951), consulté le
3 avril 2024
)
4. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-4)
(en)
Gouvernement des Etats Unis d'Amérique, Département de la Défence,
MIL-STD-483 Military standard: configuration management practices for systems, equipment, munitions, and computer programs
,
31 décembre 1970
, Section 3.4.7.2. "The contractor shall then code and test software Units, and enter the source and object code, and associated listings of each successfully tested Unit into the Developmental Configuration"
5. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-5)
(en)
Michael F. Tighe, «
The value of a proper software quality assurance methodology
», *ACM SIGMETRICS Performance Evaluation Review*,
vol.
7,
nos
3-4,â
novembre 1978
,
p.
165â172
([ISSN](https://fr.wikipedia.org/wiki/International_Standard_Serial_Number "International Standard Serial Number") [0163-5999](https://portal.issn.org/resource/issn/0163-5999), [DOI](https://fr.wikipedia.org/wiki/Digital_Object_Identifier "Digital Object Identifier") [10\.1145/1007775.811118](https://dx.doi.org/10.1145/1007775.811118), [lire en ligne](https://dl.acm.org/doi/10.1145/1007775.811118), consulté le
3 avril 2024
)
6. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-6) [Camp Smalltalk SUnit](http://sunit.sourceforge.net/)
7. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-7) *[Simple Smalltalk Testing:With Patterns](http://www.xprogramming.com/testfram.htm)*, in *Smalltalk Report* octobre 1994, Kent Beck
8. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-8)
(en)
Ward Cunningham, «
[Testing Framework](http://wiki.c2.com/?TestingFramework)
» , sur wiki.c2.com
.
9. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-9) [Xunit, Martin Fowler](http://www.martinfowler.com/bliki/Xunit.html)
10. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-10) GNU Based Compilation System for Space Embedded Applications, Blondin, J. P. & Martignano, M., DASIA 98 - Data Systems in Aerospace, Proceedings of the conference held 25-28 May, 1998 in Athens, Greece, Edited by B. Kaldeich-SchĂŒ.rmann. ESA SP-422. Paris: European Space Agency, 1998., p.137, "1998ESASP.422..137B", page 138 <http://adsbit.harvard.edu//full/1998ESASP.422..137B/0000138.000.html>
11. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-11) [Unit Testing Best Practices, Roy Osherove](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique").
12. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-12) [Test First, bob Martin](http://blog.8thlight.com/uncle-bob/2013/09/23/Test-first.html).
13. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-13) Robert Martin, *When to Mock*.
14. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-14)
(en)
Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan et Darko Marinov, «
*ReAssert: a tool for repairing broken unit tests*
», *ICSE*,â
2011
([lire en ligne](http://dl.acm.org/citation.cfm?doid=1985793.1985978))
.
15. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-15)
(en)
Gordon Fraser et Andreas Zeller, «
Generating Parameterized Unit Tests
», *ISSTA*,â
2011
([lire en ligne](http://dl.acm.org/citation.cfm?doid=2001420.2001464))
.
16. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-16) [Test::More sur CPAN](https://metacpan.org/module/Test::More), entre autres [modules de tests](https://metacpan.org/search?q=Test). Voir aussi les articles de l'association des *mongueurs de Perl* dans [Linux Magazine France](https://fr.wikipedia.org/wiki/Linux_Magazine_France "Linux Magazine France") disponibles sur <http://articles.mongueurs.net/magazines>
17. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-17) [AUnit](https://libre.adacore.com/aunit/main.html)
18. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-18) [AsUnit](http://www.asunit.org/)
19. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-19) [CppUnit](http://cppunit.sourceforge.net/) et en [version 2](https://launchpad.net/cppunit2)
20. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-20) [CUnit](http://cunit.sourceforge.net/)
21. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-21) [GoogleTest](https://code.google.com/p/googletest/)
22. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-22) [Boost.Test](http://www.boost.org/doc/libs/release/libs/test/index.html)
23. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-23) [HUnit](http://hunit.sourceforge.net/)
24. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-24) [JsUnit](http://www.jsunit.net/)
25. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-25) [http://qunitjs.com](http://qunitjs.com/) Unit testing for Javascript made by the jQuery Foundation
26. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-26)
(en)
[Unit JS](http://unitjs.com/) : « Unit testing framework for Javascript ».
27. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-27)
(en)
«
[Jest · đ Delightful JavaScript Testing](https://jestjs.io/)
», sur jestjs.io
(consulté le
2 mars 2020
)
.
28. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-28) [Welcome to The New JUnit.org! \| JUnit.org](http://junit.org/).
29. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-29)
(en)
«
[TestNG Documentation](http://testng.org/)
», sur testng.org
(consulté le
21 mai 2024
)
.
30. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-30) [NUnit - Home](http://www.nunit.org/)
31. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-31)
(en-US)
erickson-doug, «
[Writing Unit Tests for the .NET Framework with the Microsoft Unit Test Framework for Managed Code - Visual Studio](https://docs.microsoft.com/fr-fr/visualstudio/test/writing-unit-tests-for-the-dotnet-framework-with-the-microsoft-unit-test-framework-for-managed-code?view=vs-2015)
», sur docs.microsoft.com
(consulté le
4 septembre 2018
)
.
32. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-32)
(en)
«
[Home \> xUnit.net](https://xunit.github.io/)
», sur xunit.github.io
(consulté le
4 septembre 2018
)
.
33. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-33) [NUnitAsp - ASP.NET unit testing](http://nunitasp.sourceforge.net/)
34. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-34) [OUnit](http://ounit.forge.ocamlcore.org/)
35. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-35) [PHPUnit - Trac](https://www.phpunit.de/)
36. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-36) [SimpleTest - Unit Testing for PHP](http://www.simpletest.org/)
37. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-37) [Atoum](http://www.atoum.org/)
38. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-38) [utPLSQL](http://utplsql.sourceforge.net/)
39. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-39) [Simple Smalltalk Testing: With Patterns](http://www.xprogramming.com/testfram.htm)
40. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-40) <http://rpgunit.sourceforge.net/>
41. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-41)
(en)
«
[SASUnit](https://sourceforge.net/projects/sasunit/)
», sur SourceForge
(consulté le
24 février 2020
)
.
42. [â](https://fr.wikipedia.org/wiki/Test_unitaire#cite_ref-42)
(en)
«
[Ponicode - Quick and easy Javascript unit testing](https://ponicode.com/)
», sur ponicode.com
(consulté le
23 juin 2020
)
.
| [v](https://fr.wikipedia.org/wiki/Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle "ModÚle:Palette Qualité logicielle") · [m](https://fr.wikipedia.org/w/index.php?title=Mod%C3%A8le:Palette_Qualit%C3%A9_logicielle&action=edit)Gestion de la [qualité logicielle](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle "Qualité logicielle") | |
|---|---|
| [Indicateurs de qualité](https://fr.wikipedia.org/wiki/Qualit%C3%A9_logicielle#Indicateurs_de_qualit%C3%A9_logicielle "Qualité logicielle") ([ISO/CEI 9126](https://fr.wikipedia.org/wiki/ISO/CEI_9126 "ISO/CEI 9126")) | Capacité fonctionnelle (réponse aux [exigences](https://fr.wikipedia.org/wiki/Exigence_\(ing%C3%A9nierie\) "Exigence (ingénierie)")) [Fiabilité](https://fr.wikipedia.org/wiki/Fiabilit%C3%A9 "Fiabilité") [Maintenabilité](https://fr.wikipedia.org/wiki/Maintenabilit%C3%A9 "Maintenabilité") [Performance](https://fr.wikipedia.org/wiki/Performances_\(informatique\) "Performances (informatique)") [Portabilité](https://fr.wikipedia.org/wiki/Portabilit%C3%A9_\(informatique\) "Portabilité (informatique)") [Utilisabilité](https://fr.wikipedia.org/wiki/Utilisabilit%C3%A9 "Utilisabilité") |
| Compréhension et contrÎle du [code source](https://fr.wikipedia.org/wiki/Code_source "Code source") | |
| | |
| [Tests](https://fr.wikipedia.org/wiki/Test_\(informatique\) "Test (informatique)") | [Acceptation](https://fr.wikipedia.org/wiki/Test_d%27acceptation "Test d'acceptation") [Intégration](https://fr.wikipedia.org/wiki/Test_d%27int%C3%A9gration "Test d'intégration") [Performance](https://fr.wikipedia.org/wiki/Test_de_performance "Test de performance") [Régression](https://fr.wikipedia.org/wiki/Test_de_r%C3%A9gression "Test de régression") [Unitaire]() [Utilisateur](https://fr.wikipedia.org/wiki/Test_utilisateur "Test utilisateur") [Validation](https://fr.wikipedia.org/wiki/Test_de_validation "Test de validation") |
| [Métriques](https://fr.wikipedia.org/wiki/M%C3%A9trique_\(logiciel\) "Métrique (logiciel)") | [Cohésion](https://fr.wikipedia.org/wiki/Coh%C3%A9sion_\(informatique\) "Cohésion (informatique)") [Couplage](https://fr.wikipedia.org/wiki/Couplage_\(informatique\) "Couplage (informatique)") [Couverture de code](https://fr.wikipedia.org/wiki/Couverture_de_code "Couverture de code") [Halstead](https://fr.wikipedia.org/wiki/M%C3%A9triques_d%27Halstead "Métriques d'Halstead") [Indépendance fonctionnelle](https://fr.wikipedia.org/wiki/Ind%C3%A9pendance_fonctionnelle "Indépendance fonctionnelle") [Indice de maintenabilité](https://fr.wikipedia.org/wiki/Indice_de_maintenabilit%C3%A9 "Indice de maintenabilité") [Ligne de code](https://fr.wikipedia.org/wiki/Ligne_de_code "Ligne de code") [Nombre cyclomatique](https://fr.wikipedia.org/wiki/Nombre_cyclomatique "Nombre cyclomatique") [Point de fonction](https://fr.wikipedia.org/wiki/Point_de_fonction "Point de fonction") |
| Remaniements | [Maintenance](https://fr.wikipedia.org/wiki/Maintenance_du_logiciel "Maintenance du logiciel") [Optimisation de code](https://fr.wikipedia.org/wiki/Optimisation_de_code "Optimisation de code") [Réusinage de code](https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code "Réusinage de code") ([RÚgle de trois](https://fr.wikipedia.org/wiki/R%C3%A8gle_de_trois_\(programmation_informatique\) "RÚgle de trois (programmation informatique)")) |
| Principes de [programmation](https://fr.wikipedia.org/wiki/Programmation_informatique "Programmation informatique") | |
| | |
| [SOLID](https://fr.wikipedia.org/wiki/SOLID_\(informatique\) "SOLID (informatique)") | [Responsabilité unique](https://fr.wikipedia.org/wiki/Principe_de_responsabilit%C3%A9_unique "Principe de responsabilité unique") [Ouvert/fermé](https://fr.wikipedia.org/wiki/Principe_ouvert/ferm%C3%A9 "Principe ouvert/fermé") [Substitution de Liskov](https://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov "Principe de substitution de Liskov") [Ségrégation des interfaces](https://fr.wikipedia.org/wiki/Principe_de_s%C3%A9gr%C3%A9gation_des_interfaces "Principe de ségrégation des interfaces") [Inversion des dépendances](https://fr.wikipedia.org/wiki/Inversion_des_d%C3%A9pendances "Inversion des dépendances") |
| Mauvaises pratiques | |
| | |
| [Antipatterns](https://fr.wikipedia.org/wiki/Antipattern "Antipattern") | [Attente active](https://fr.wikipedia.org/wiki/Attente_active "Attente active") [Grosse boule de boue](https://fr.wikipedia.org/wiki/Grosse_boule_de_boue "Grosse boule de boue") [Programmation spaghetti](https://fr.wikipedia.org/wiki/Programmation_spaghetti "Programmation spaghetti") ([syndrome](https://fr.wikipedia.org/wiki/Syndrome_du_plat_de_spaghettis "Syndrome du plat de spaghettis")) [Réinventer la roue](https://fr.wikipedia.org/wiki/R%C3%A9inventer_la_roue "Réinventer la roue") |
| | |
| [Code smells](https://fr.wikipedia.org/wiki/Code_smell "Code smell") | [Duplication de code](https://fr.wikipedia.org/wiki/Duplication_de_code "Duplication de code") [God object](https://fr.wikipedia.org/wiki/God_object "God object") |
| Voir aussi : [Génie logiciel](https://fr.wikipedia.org/wiki/G%C3%A9nie_logiciel "Génie logiciel"), [Software craftsmanship](https://fr.wikipedia.org/wiki/Software_craftsmanship "Software craftsmanship"), [Dégradation logicielle](https://fr.wikipedia.org/wiki/D%C3%A9gradation_logicielle "Dégradation logicielle") | |
- [](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail de lâinformatique") [Portail de lâinformatique](https://fr.wikipedia.org/wiki/Portail:Informatique "Portail:Informatique") |
| Shard | 152 (laksa) |
| Root Hash | 17790707453426894952 |
| Unparsed URL | org,wikipedia!fr,/wiki/Test_unitaire s443 |