Google C++ Testing Framework ( Google Test ) är ett bibliotek för enhetstestning i C++ . Källkoden har varit öppen sedan mitten av 2008 [1] under BSD-licensen . Dokumentationen är delvis översatt till ryska. [2] .
Google Test bygger på testmetoden xUnit , det vill säga när enskilda delar av programmet (klasser, funktioner, moduler) testas separat från varandra, isolerat. Biblioteket i sig är utvecklat med aktiv användning av testning, när du lägger till några delar till den officiella versionen, förutom koden för själva ändringarna, är det nödvändigt att skriva en uppsättning tester för att bekräfta deras korrekthet.
Google Test stöder officiellt Linux , Windows och Mac . För dessa plattformar tillhandahåller biblioteket alla nödvändiga byggskript. Google Test fungerar dock även på AIX , HP-UX , Solaris , Tru64 , zSeries och många andra system. För plattformar som inte stöds officiellt måste utvecklaren själv kompilera Google-testet.
Det finns till exempel en funktion som returnerar ett heltal:
int Faktoriell ( int n ); // Return factorial nTestet för denna funktion kan vara så här:
// Kontrollera faktorvärdet 0. TEST ( FacttorialTest , HandlesZeroInput ) { EXPECT_EQ ( 1 , Faktoriell ( 0 )); } // Kontrollera faktorn för några positiva värden. TEST ( FactoryTest , HandlesPositiveInput ) { EXPECT_EQ ( 1 , Faktoriell ( 1 )); EXPECT_EQ ( 2 , Faktoriell ( 2 )); EXPECT_EQ ( 6 , Faktoriell ( 3 )); EXPECT_EQ ( 40320 , Faktoriell ( 8 )); }Ett test för en FIFO -kö med namnet Queue med följande gränssnitt:
mall < typnamn E > // E - elementtyp. klasskö { _ offentliga : kö (); void Enqueue ( const E & element ); E * Avkö (); // Returnerar NULL om kön är tom. storlek_t storlek () const ; ... };Först definieras en testklass ( testfixtur ) :
klass QueueTest : public :: testing :: Test { skyddad : virtual void SetUp () { q0_ . kö ( 1 ); q1_ . kö ( 2 ); q2_ . kö ( 3 ); } Kö < int > q0_ ; Kö < int > q1_ ; Kö < int > q2_ ; };Nu används själva testet (makrot TEST_F() istället för TEST(), eftersom testfunktionen måste ha tillgång till klassens fält och metoder):
// Kontrollera initieringen av kön. TEST_F ( QueueTest , IsEmptyInitially ) { EXPECT_EQ ( 0 , q0_.storlek ( ) ); } // Kontrollera om elementet är borttaget från kön. 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 ( ) ); radera ; _ n = q2_ . dequeue (); ASSERT_TRUE ( n != NULL ); EXPECT_EQ ( 2 , * n ); EXPECT_EQ ( 1 , q2_.storlek ( ) ); radera ; _ }Det finns två huvudtyper av kontroller ( påståenden ) i Google Test --- ASSERT_* och EXPECT_*. Om EXPECT_* används fortsätter testet att köras om det misslyckas, även om felet kommer att loggas och testet misslyckas ändå. Om det är meningslöst att fortsätta testet, används ASSERT_*. Denna kontroll avslutar testet om kontrollen misslyckas.
Google Test-biblioteket är nära relaterat till Google Mock- biblioteket , som låter dig testa hur din klass interagerar med andra. Med det här biblioteket kan du se till att din klass anropar metoder för andra objekt [5] , och även kontrollera att dessa metoder anropas med rätt parametervärden [6] , rätt antal gånger [7] , i rätt ordning [8] .