Google C++ Testing Framework ( Google Test ) je knihovna pro testování jednotek v C++ . Zdrojový kód je otevřen od poloviny roku 2008 [1] pod licencí BSD . Dokumentace je částečně přeložena do ruštiny. [2] .
Google Test je postaven na metodice testování xUnit , tedy kdy jsou jednotlivé části programu (třídy, funkce, moduly) testovány odděleně od sebe, izolovaně. Samotná knihovna je vyvíjena s aktivním využitím testování, při přidávání jakýchkoli částí do oficiální verze je kromě kódu samotných změn nutné napsat sadu testů pro potvrzení jejich správnosti.
Google Test oficiálně podporuje Linux , Windows a Mac . Pro tyto platformy knihovna poskytuje všechny potřebné skripty sestavení. Google Test však funguje i na systémech AIX , HP-UX , Solaris , Tru64 , zSeries a mnoha dalších systémech. U oficiálně nepodporovaných platforem musí vývojář sestavit Google Test sám.
Existuje například funkce, která vrací celé číslo:
int Faktorial ( int n ); // Návrat faktoriálu nTest této funkce by mohl vypadat takto:
// Kontrola faktoriálu 0. TEST ( FactorialTest , HandlesZeroInput ) { EXPECT_EQ ( 1 , faktoriál ( 0 )); } // Zkontrolujte faktoriál některých kladných hodnot. TEST ( FactorialTest , HandlesPositiveInput ) { EXPECT_EQ ( 1 , faktoriál ( 1 )); EXPECT_EQ ( 2 , faktoriál ( 2 )); EXPECT_EQ ( 6 , faktoriál ( 3 )); EXPECT_EQ ( 40320 , faktoriál ( 8 )); }Test pro frontu FIFO s názvem Queue s následujícím rozhraním:
template < typename E > // E - typ prvku. třída Fronta { veřejnost : fronta (); void Enqueue ( const E & element ); E * Dequeue (); // Pokud je fronta prázdná, vrátí NULL. size_t size () const ; ... };Nejprve je definována testovací třída ( testovací přípravek ) :
class QueueTest : public :: testování :: Test { chráněno : virtuální void Nastavení () { q0_ . Zařadit ( 1 ); q1_ . Enqueue ( 2 ); q2_ . Enqueue ( 3 ); } Fronta < int > q0_ ; Fronta < int > q1_ ; Fronta < int > q2_ ; };Nyní samotný test (místo TEST() je použito makro TEST_F(), protože testovací funkce musí mít přístup k polím a metodám třídy:
// Kontrola inicializace fronty. TEST_F ( QueueTest , IsEmptyInitially ) { EXPECT_EQ ( 0 , q0_.velikost ( ) ); } // Zkontrolujte, zda je prvek odstraněn z fronty. TEST_F ( QueueTest , DequeueWorks ) { int * n = q0_ . dequeue (); EXPECT_EQ ( NULL , n ); n = q1_ . dequeue (); ASSERT_TRUE ( n != NULL ); EXPECT_EQ ( 1 , * n ); EXPECT_EQ ( 0 , q1_.size ( ) ); smazáno ; _ n = q2_ . dequeue (); ASSERT_TRUE ( n != NULL ); EXPECT_EQ ( 2 , * n ); EXPECT_EQ ( 1 , q2_ .velikost ( ) ); smazáno ; _ }V testu Google existují dva hlavní typy kontrol ( assessmentů) --- ASSERT_ * a EXPECT_*. Pokud je použit EXPECT_*, test bude pokračovat, pokud selže, ačkoli selhání bude zaznamenáno a test se stejně nezdaří. Pokud nemá smysl v testu pokračovat, použije se ASSERT_*. Tato kontrola ukončí test, pokud kontrola selže.
Knihovna Google Test úzce souvisí s knihovnou Google Mock , která vám umožňuje otestovat, jak vaše třída komunikuje s ostatními. Pomocí této knihovny se můžete ujistit, že vaše třída volá metody jiných objektů [5] , a také zkontrolovat, zda jsou tyto metody volány se správnými hodnotami parametrů [6] , správným počtem [7] , v správné pořadí [8] .