Google C++ Testing Framework ( Google Test ) es una biblioteca para pruebas unitarias en C++ . El código fuente está abierto desde mediados de 2008 [1] bajo la licencia BSD . La documentación está parcialmente traducida al ruso. [2] .
Google Test se basa en la metodología de prueba xUnit , es decir, cuando las partes individuales del programa (clases, funciones, módulos) se prueban por separado, de forma aislada. La biblioteca en sí se desarrolla con el uso activo de pruebas, al agregar cualquier parte a la versión oficial, además del código de los cambios en sí, es necesario escribir un conjunto de pruebas para confirmar su corrección.
Google Test admite oficialmente Linux , Windows y Mac . Para estas plataformas, la biblioteca proporciona todos los scripts de compilación necesarios. Sin embargo, Google Test también funciona en AIX , HP-UX , Solaris , Tru64 , zSeries y muchos otros sistemas. Para las plataformas oficialmente no admitidas, el desarrollador debe compilar Google Test por sí mismo.
Por ejemplo, hay una función que devuelve un número entero:
factorial int ( int n ); // Devuelve el factorial nLa prueba para esta función podría ser así:
// Comprobar el factorial de 0. PRUEBA ( FactorialTest , HandlesZeroInput ) { EXPECT_EQ ( 1 , Factorial ( 0 )); } // Comprobar el factorial de algunos valores positivos. PRUEBA ( PruebaFactorial , ManejaEntradaPositiva ) { EXPECT_EQ ( 1 , Factorial ( 1 )); EXPECT_EQ ( 2 , Factorial ( 2 )); EXPECT_EQ ( 6 , Factorial ( 3 )); EXPECT_EQ ( 40320 , Factorial ( 8 )); }Una prueba para una cola FIFO llamada Queue con la siguiente interfaz:
template < typename E > // E - tipo de elemento. cola de clase { público : cola (); void Encolar ( const E & elemento ); E * Quitar de la cola (); // Devuelve NULL si la cola está vacía. tamaño_t tamaño () const ; ... };Primero, se define una clase de prueba (dispositivo de prueba ) :
class QueueTest : public :: testing :: Test { protegido : Configuración de vacío virtual () { q0_ . Poner en cola ( 1 ); q1_ . Poner en cola ( 2 ); q2_ . Poner en cola ( 3 ); } Cola < int > q0_ ; Cola < int > q1_ ; Cola < int > q2_ ; };Ahora la prueba en sí (la macro TEST_F() se usa en lugar de TEST(), ya que la función de prueba debe tener acceso a los campos y métodos de la clase):
// Comprobar la inicialización de la cola. PRUEBA_F ( PruebaCola , InicialmenteEstáVacío ) { ESPERAR_EQ ( 0 , q0_.tamaño ( ) ); } // Comprobar si el elemento se elimina de la cola. PRUEBA_F ( PruebaCola , TrabajosDeCola ) { int * n = q0_ . sacar de la cola (); ESPERAR_EQ ( NULO , n ); n = q1_ . sacar de la cola (); ASSERT_TRUE ( n != NULL ); ESPERAR_EQ ( 1 , * n ); ESPERAR_EQ ( 0 , q1_.tamaño ( ) ); borrar ; _ n = q2_ . sacar de la cola (); ASSERT_TRUE ( n != NULL ); ESPERAR_EQ ( 2 , * n ); ESPERAR_EQ ( 1 , q2_ .tamaño ( ) ); borrar ; _ }Hay dos tipos principales de comprobaciones ( afirmaciones ) en Google Test: ASSERT_* y EXPECT_*. Si se usa EXPECT_*, la prueba continuará ejecutándose si falla, aunque la falla se registrará y la prueba fallará de todos modos. Si no tiene sentido continuar con la prueba, se utiliza ASSERT_*. Esta verificación finaliza la prueba si la verificación falla.
La biblioteca Google Test está estrechamente relacionada con la biblioteca Google Mock , que le permite probar cómo interactúa su clase con los demás. Con esta biblioteca, puede asegurarse de que su clase llame a métodos de otros objetos [5] , y también verificar que estos métodos se llamen con los valores de parámetro correctos [6] , el número correcto de veces [7] , en el orden correcto [8] .