test google c++ linux unit-testing installation googletest

c++ - Cómo configurar googleTest como biblioteca compartida en Linux



google test (9)

Debian ya no proporciona ningún paquete precompilado para gTest. Sugieren que integre el marco en el archivo make de su proyecto. Pero quiero mantener mi archivo limpio. ¿Cómo configuro gTest como las versiones anteriores (<1.6.0), para poder enlazar una biblioteca?


Antes de comenzar, asegúrese de haber leído y entendido esta nota de Google . Este tutorial facilita el uso de gtest, pero puede introducir errores desagradables .

1. Obtener el marco de googletest

wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz

O consíguelo a hand . No voy a mantener este pequeño tutorial, así que si se topa con él y los enlaces están desactualizados, siéntase libre de editarlo.

2. Desempaquetar y compilar la prueba de google

tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make

3. "Instala" los encabezados y libs en tu sistema.

Este paso puede diferir de la distribución a la distribución, por lo tanto, asegúrese de copiar los encabezados y libs en el directorio correcto. Lo logré comprobando dónde se encontraban las antiguas librerías de Debian . Pero estoy seguro de que hay mejores formas de hacer esto. Nota: make install es peligroso y no es compatible

$ sudo cp -a include/gtest /usr/include $ sudo cp -a libgtest_main.so libgtest.so /usr/lib/

4. Actualiza la caché del vinculador

... y comprueba si el enlazador GNU conoce las librerías

$ sudo ldconfig -v | grep gtest

Si el resultado es así:

libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0

, todo esta bien.

gTestframework ahora está listo para usar. Simplemente no olvide vincular su proyecto a la biblioteca estableciendo -lgtest como -lgtest enlazador y, opcionalmente, si no escribió su propia rutina de prueba, el -lgtest_main .

A partir de ahora, es posible que desee ir a la documentation Google sobre el marco para aprender cómo funciona. Feliz codificación!

Editar: ¡ Esto también funciona para OS X! Consulte "Cómo configurar adecuadamente googleTest en OS X"


Déjame responder esto específicamente para usuarios de ubuntu. Primero, instale el paquete de desarrollo gtest.

sudo apt-get install libgtest-dev

Tenga en cuenta que este paquete solo instala archivos fuente. Debe compilar el código usted mismo para crear los archivos de biblioteca necesarios. Estos archivos fuente deben estar ubicados en / usr / src / gtest. Busque esta carpeta y use cmake para compilar la biblioteca:

sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo cmake CMakeLists.txt sudo make # copy or symlink libgtest.a and libgtest_main.a to your /usr/lib folder sudo cp *.a /usr/lib

Ahora para compilar sus programas que usan gtest, debe vincularlo con:

-lgtest -lgtest_main

Esto funcionó perfectamente para mí en Ubuntu 14.04LTS.


Esta respuesta de askubuntu es lo que funcionó para mí. Parece más simple que otras opciones y es menos propenso a errores, ya que usa el paquete libgtest-dev para obtener las fuentes y compilaciones desde allí: https://askubuntu.com/questions/145887/why-no-library-files-installed-for-google-test?answertab=votes#tab-top

Por favor refiérase a esa respuesta, pero solo como un atajo también proporciono los pasos aquí:

sudo apt-get install -y libgtest-dev sudo apt-get install -y cmake cd /usr/src/gtest sudo cmake . sudo make sudo mv libg* /usr/lib/

Después de eso, podría construir mi proyecto, que depende de gtest sin problemas.


Esta situación me decepcionó de manera similar y terminé creando mis propios paquetes fuente de Ubuntu para esto. Estos paquetes fuente le permiten producir fácilmente un paquete binario. Se basan en la última fuente de gtest & gmock a partir de esta publicación.

Paquete de prueba Google DEB Source

Paquete de origen de Google Mock DEB

Para construir el paquete binario haz esto:

tar -xzvf gtest-1.7.0.tar.gz cd gtest-1.7.0 dpkg-source -x gtest_1.7.0-1.dsc cd gtest-1.7.0 dpkg-buildpackage

Puede decirte que necesitas algunos paquetes de requisitos previos, en cuyo caso solo necesitas instalarlos. Aparte de eso, los paquetes binarios .deb construidos deberían estar sentados en el directorio padre.

Para GMock, el proceso es el mismo.

Como nota al margen, aunque no es específico para mis paquetes fuente, al vincular gtest a su prueba de unidad, asegúrese de que primero se incluya gtest ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Esto parece una gotcha común.


Esto construirá e instalará tanto gtest como gmock 1.7.0:

mkdir /tmp/googleTestMock tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock cd /tmp/googleTestMock mv googletest-release-1.7.0 gtest cd googlemock-release-1.7.0 cmake -DBUILD_SHARED_LIBS=ON . make -j$(nproc) sudo cp -a include/gmock /usr/include sudo cp -a libgmock.so libgmock_main.so /usr/lib/ sudo cp -a ../gtest/include/gtest /usr/include sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/ sudo ldconfig


Esto instalará la prueba de google y la biblioteca falsa en el sistema Ubuntu / Debian:

sudo apt-get install google-mock

Probado en Google Cloud en una imagen basada en Debian.


Me tomó un tiempo darme cuenta de esto porque la "instalación normal" normal se ha eliminado y no uso cmake. Aquí está mi experiencia para compartir. En el trabajo, no tengo acceso de root en Linux, así que instalé el marco de prueba de Google en mi directorio principal: ~/usr/gtest/ .

Para instalar el paquete en ~ / usr / gtest / como bibliotecas compartidas, junto con la compilación de muestra:

$ mkdir ~/temp $ cd ~/temp $ unzip gtest-1.7.0.zip $ cd gtest-1.7.0 $ mkdir mybuild $ cd mybuild $ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" .. $ make $ cp -r ../include/gtest ~/usr/gtest/include/ $ cp lib*.so ~/usr/gtest/lib

Para validar la instalación, use la siguiente prueba.c como un ejemplo de prueba simple:

#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }

Compilar:

$ export GTEST_HOME=~/usr/gtest $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp


Por si acaso alguien más se pone en la misma situación que yo ayer (2016-06-22) y tampoco tiene éxito con los enfoques ya publicados, en Lubuntu 14.04 funcionó para mí usando la siguiente cadena de comandos:

git clone https://github.com/google/googletest cd googletest cmake -DBUILD_SHARED_LIBS=ON . make cd googlemock sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/ sudo ldconfig


Si está utilizando CMake, puede usar ExternalProject_Add como se describe here .

Esto evita tener que mantener el código fuente de Gtest en su repositorio o instalarlo en cualquier lugar. Se descarga y se construye en su árbol de compilación de forma automática.