Le test unitaire constitue le premier maillon de la chaîne de validation d’un logiciel. Très proche du code, il est généralement écrit dans le même langage de programmation. Longtemps considérée par les développeurs comme ingrate et fastidieuse, la phase de test unitaire du cycle en V a souvent été utilisée comme délai supplémentaire pour la livraison du code. Avec l’avènement des méthodes agiles, le test en général et le test unitaire en particulier est remis au centre des activités de développement. En effet au travers du TDD (Test Driven Development), l’activité de production de tests est devenue créative et intégrée à la phase de développement.
Le test unitaire vise à tester chaque unité de programmation individuellement. Il s'attache à vérifier chaque comportement des fonctions. Pour cela, chaque fonction est appelée avec des paramètres permettant de stimuler différents chemins d'exécution afin de constituer autant de tests unitaires. À chaque appel de fonction doit être associé le résultat attendu, cela implique que le comportement sous test soit reproductible et déterministe. Lorsqu'il est construit correctement, un test unitaire participe à la documentation de la fonction qu'il teste avec en prime la certitude de rester en phase avec le code.
Un test unitaire est donc un morceau de code qui va successivement mettre l'environnement du composant sous test dans un état particulier favorable au test envisagé, invoquer le composant sous test avec les paramètres souhaités puis établir le verdict du test en comparant le résultat attendu au résultat obtenu. Ces trois étapes, souvent identifiées par les termes define-when-then, structurent les tests unitaires.