Proba unitari

In programmation, un **proba unitari** o **test unitari** (in anglese *unit testing*) es un maniera de verificar le correcte functionamento de un modulo de codice. Isto servi pro assecurar que cata un del modulos functiona correctemente separatemente. Alora, con le probas de integration, on potera assecurar le correcte functionamento del systema o subsystema in question.

Le idea es de scriber casos de proba (*test cases*) pro cata function non trivial o methodo in le modulo, a fin que cata caso sia independente del resto.

## Characteristicas
A fin que un proba unitari sia *bon* on debe completar le sequente requirimentos:
; Automatisabile: Illo non deberea requirer se un intervention manual. Isto es specialmente usate pro integration continue.
; Complete: Illos debe coperir le major quantitate de codice.
; Repetibile o reutilisabile: On non debe crear probas qui solmente pote esser executate un sol vice. Anque es usate pro integration continue.
; Independente: Le execution de un proba non debe affectar le execution de un altere.
; Professional: Le probas debe esser considerate equal que le codice, con le mesme professionalismo, documentation, etc.

Ben que iste requirimentos non debe esser completate al pede del littera, on recommenda sequer lo o alteremente le probas perde parte de lor function.

## Avantages
Le objectivo del probas unitari es isolar cata parte del programma e monstrar que le partes individual es correcte. Illos provide un contracto scribite que le parte de codice debe satisfacer. Iste probas isolate provide cinque avantages basic:
; Illos fomenta le cambio: Le probas unitari facilita que le programmator cambia le codice pro meliorar su structura (lo qui ha essite appellate refactorisation), durante que illos permitte facer probas super le cambios e assi assecurar se que le nove cambios non ha introducite errores.
; Illos simplifica le integration: Durante que illos permitte arrivar a le phase de integration con un grado alte de securitate que le codice functiona correctemente. De iste maniera on facilita le probas de integration.
; Illos documenta le codice: Le proprie probas le es documentation del codice durante que ibi on pote vider como utilisar lo.
; Illos permitte separar le interfacie e le implementation: A causa que le unic interaction inter le casos de proba e le unitates sub proba es le interfacies de iste ultimes, on pote cambiar cata un sin affectar le alteres, vices usante objectos simulatores (*mock object*) pro simular le comportamento de objectos complexe.
; Le errores es plus stricte e es plus facile de localisar: A causa que on ha probas unitari qui pote dismascar los.

## Limitationes
Il es importante de vider que le probas unitari non discoperira tote le errores del codice. Per definition, illos solmente verifica le unitates singule. Dunque, illos non discoperira errores de integration, problemas de rendimento e altere problemas qui affecta tote le systema in su ensemble. Equalmente, il pote non esser trivial de anticipar tote le casos special de entratas que le unitate pote in realitate reciper de programma sub studio. Le probas unitari solmente es effective si on lo usa in ensemble con altere probas de programmatura.

## Utensiles
* JUnit: Ambiente de probas pro Java create per Erich Gamma e Kent Beck. Illo es basate super SUnit create originalmente pro realisar probas unitari pro le linguage Smalltalk.
* TestNG: Create pro substituer alcun *deficientias* in JUnit.
* JTiger: Basate in annotationes, como TestNG.
* SimpleTest: Ambiente de probas pro applicationes realisate in PHP.
* PHPUnit: Systema pro le realisation probas unitari in PHP.
* CPPUnit: Version del *framework* pro le linguages C/C++.
* NUnit: Version del *framework* pro le platteforma .NET.
* FoxUnit: Ambiente in codice aperite de probas unitari pro Microsoft Visual FoxPro
* MOQ: Ambiente pro le creation dynamic de objectos simulatores (mocks). 
* QUnit: Bibliotheca pro probas unitari in Javascript. Create per le fundation jQuery, illo ha essite rescribite pro esser independente del bibliotheca jQuery.
* libunittest : Bibliotheca portabile pro probas unitari in C++ qui usa le nove standard C++11.