Google C++ Testing Framework ( Google Test ) este o bibliotecă pentru testarea unitară în C++ . Codul sursă este deschis de la mijlocul anului 2008 [1] sub licența BSD . Documentația este tradusă parțial în limba rusă. [2] .
Google Test este construit pe metodologia de testare xUnit , adică atunci când părți individuale ale programului (clase, funcții, module) sunt testate separat unele de altele, izolat. Biblioteca în sine este dezvoltată cu utilizarea activă a testării, atunci când adăugați orice părți la versiunea oficială, pe lângă codul modificărilor în sine, este necesar să scrieți un set de teste pentru a confirma corectitudinea acestora.
Google Test acceptă oficial Linux , Windows și Mac . Pentru aceste platforme, biblioteca oferă toate scripturile de compilare necesare. Cu toate acestea, Google Test funcționează și pe AIX , HP-UX , Solaris , Tru64 , zSeries și multe alte sisteme. Pentru platformele neacceptate oficial, dezvoltatorul trebuie să alcătuiască el însuși Google Test.
De exemplu, există o funcție care returnează un număr întreg:
int Factorial ( int n ); // Returnează factorial nTestul pentru această funcție ar putea fi astfel:
// Verificați factorial de 0. TEST ( Test Factorial , HandlesZeroInput ) { EXPECT_EQ ( 1 , factorial ( 0 )); } // Verificați factorialul unor valori pozitive. TEST ( FactorialTest , HandlesPositiveInput ) { EXPECT_EQ ( 1 , factorial ( 1 )); EXPECT_EQ ( 2 , factorial ( 2 )); EXPECT_EQ ( 6 , factorial ( 3 )); EXPECT_EQ ( 40320 , factorial ( 8 )); }Un test pentru o coadă FIFO numită Queue cu următoarea interfață:
template < typename E > // E - tip element. clasa coadă { public : coada (); void Enqueue ( const E & element ); E * Scoateți la coadă (); // Returnează NULL dacă coada este goală. size_t size () const ; ... };În primul rând, este definită o clasă de testare (dispozitiv de testare ) :
clasa QueueTest : public :: testing :: Test { protejat : virtual void SetUp () { q0_ . coadă ( 1 ); q1_ . coadă ( 2 ); q2_ . coadă ( 3 ); } Coada < int > q0_ ; Coada < int > q1_ ; Coada < int > q2_ ; };Acum testul însuși (macrograma TEST_F() este folosită în loc de TEST(), deoarece funcția de testare trebuie să aibă acces la câmpurile și metodele clasei):
// Verificați inițializarea cozii. TEST_F ( QueueTest , IsEmptyInitially ) { EXPECT_EQ ( 0 , q0_.size ( ) ); } // Verificați dacă elementul este eliminat din coadă. TEST_F ( QueueTest , DequeueWorks ) { int * n = q0_ . scoate la coadă (); EXPECT_EQ ( NULL , n ); n = q1_ . scoate la coadă (); ASSERT_TRUE ( n != NULL ); EXPECT_EQ ( 1 , * n ); EXPECT_EQ ( 0 , q1_.size ( ) ); sterge ; _ n = q2_ . scoate la coadă (); ASSERT_TRUE ( n != NULL ); EXPECT_EQ ( 2 , * n ); EXPECT_EQ ( 1 , q2_ .size ( ) ); sterge ; _ }Există două tipuri principale de verificări ( aserțiuni ) în Google Test --- ASSERT_* și EXPECT_*. Dacă se folosește EXPECT_*, testul va continua să ruleze dacă eșuează, deși eșecul va fi înregistrat și testul va eșua oricum. Dacă este inutil să continui testul, se folosește ASSERT_*. Această verificare încheie testul dacă verificarea eșuează.
Biblioteca Google Test este strâns legată de biblioteca Google Mock , care vă permite să testați modul în care clasa dvs. interacționează cu ceilalți. Cu această bibliotecă, vă puteți asigura că clasa dvs. apelează metode ale altor obiecte [5] și, de asemenea, verifica că aceste metode sunt apelate cu valorile parametrilor potrivite [6] , de numărul potrivit de ori [7] , în ordine corectă [8] .