Testovací rámec Google C++

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.

Hlavní vlastnosti

Podporované platformy

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.

Příklad testování bezplatné funkce

Existuje například funkce, která vrací celé číslo:

int Faktorial ( int n ); // Návrat faktoriálu n

Test 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 )); }

Příklad testu třídy

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.

Další funkce

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] .

Poznámky

  1. Testovací blog Google: Oznamujeme: Nový testovací rámec Google C++ . Získáno 16. července 2009. Archivováno z originálu dne 5. dubna 2009.
  2. googletest-translations - Hosting projektu na Google Code . Získáno 28. dubna 2022. Archivováno z originálu dne 28. dubna 2022.
  3. Testovací přípravky: Použití stejné konfigurace dat pro více testů – Google Test Primer (odkaz dolů) . Získáno 25. dubna 2016. Archivováno z originálu 5. dubna 2016. 
  4. Známá omezení – Google Test Primer (nedostupný odkaz) . Získáno 25. dubna 2016. Archivováno z originálu 5. dubna 2016. 
  5. Obecná syntaxe – Google C++ Mocking Framework pro figuríny . Získáno 25. dubna 2016. Archivováno z originálu 8. února 2016.
  6. Matchers: Jaké argumenty očekáváme? - Google C++ Mocking Framework pro figuríny . Získáno 25. dubna 2016. Archivováno z originálu 8. února 2016.
  7. Kardinality: Kolikrát se to bude nazývat? - Google C++ Mocking Framework pro figuríny . Získáno 25. dubna 2016. Archivováno z originálu 8. února 2016.
  8. Uspořádané vs. Neuspořádané hovory – Google C++ Mocking Framework pro figuríny . Získáno 25. dubna 2016. Archivováno z originálu 8. února 2016.

Odkazy