test google cmake googletest

cmake - google - c++ testing



Prueba de la unidad de salida y asesoramiento de la estructura del proyecto-CMake+Google Test Framework (2)

  1. En realidad, es una práctica recomendada de CMAK llamada compilación fuera de la fuente.
  2. AFAIK no se recomienda instalar las bibliotecas de Googletest recompiladas en el sistema. Por lo tanto, no debería haber ningún problema si lo compila como una biblioteca compartida o estática como parte de la compilación de su proyecto. He utilizado googletest 1.6.0 de esta manera sin problemas en Windows, Linux, OSX y Android.
  3. No estoy seguro de CTest, pero el objetivo personalizado es definitivamente capaz de ejecutar todas las pruebas por usted. Aquí hay una breve solución que puedo sugerir:

Agregue las siguientes líneas en su CMakeLists.txt nivel CMakeLists.txt (antes de agregar cualquier prueba):

add_custom_target(test) macro(run_test test_target) add_custom_target(${test_target}_runtest COMMAND ${test_target} #cmake 2.6 required DEPENDS ${test_target} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") add_dependencies(test ${test_target}_runtest) endmacro()

A continuación para cada prueba, agregue una sola línea para agregar su prueba al objetivo de la test :

#add_executable(mytest ${mysources}) run_test(mytest)

Soy nuevo en CMake y estoy usando Google Test Framework. He buscado ejemplos más complejos de la combinación de CMake y el marco de pruebas de Google, pero no he encontrado mucha suerte. Esperaba que alguien pudiera dar su opinión sobre la configuración a la que he llegado y responder una pregunta por mí. Aquí está la estructura básica del proyecto:

Carpeta de proyecto
-CMakeLists.txt
/construir
/incluir
-todos mis archivos .h
/ src
-CMakeLists.txt
-todos mis archivos .cpp
/ pruebas
-CMakeLists.txt
/ gtest
-Google''s CMakeLists.txt
/ burlas
-CMakeLists.txt
-cpp y h archivos para mocks

En pocas palabras, el archivo raíz cmake agrega src y prueba como subdirectorios. El archivo src cmake globs los archivos cpp en una biblioteca. El archivo cmake de pruebas agrega simulacros y gtest como subdirectorios. El archivo simulado de cmake agrupa todos sus archivos cpp en una segunda biblioteca. Finalmente, el archivo cmake en la carpeta de pruebas vincula la biblioteca src, las bibliotecas de google y las bibliotecas de simulacros con los ejecutables de prueba de la unidad.

Lo que finalmente consigo son varios ejecutables: objA_unittest, objB_unittest, etc.

Unas pocas cosas:

  1. Para compilar todo esto y aún mantener el directorio de mi proyecto bastante limpio, cd en la carpeta de compilación y ejecuto "cmake ..." Esto parece funcionar realmente bien y estaba planeando configurar vim para ejecutar siempre make out de esta carpeta. ¿Alguien tiene algún consejo o ve algún problema con este enfoque?

  2. No me gusta la idea de tener que anidar la biblioteca de Google en la carpeta de mi proyecto (especialmente si eventualmente tengo varios proyectos que la usan), pero como parece sugerido que no precompile las bibliotecas de Google que puedo ver No hay manera de evitar esto. Sin embargo, si alguien sabe de una mejor manera, me encantaría escucharla.

  3. Ejecutando las pruebas. Me gusta que todo lo que tengo que hacer es ejecutar "make test" para ejecutar todas mis pruebas unitarias con ctest. Sin embargo, he descubierto que no me gusta mucho la salida. Cada ejecutable de prueba unitaria contiene varias pruebas unitarias diferentes. Ejecutar estos directamente proporciona comentarios muy detallados de Google. Si una de las pruebas en un ejecutable falla, sé exactamente qué prueba falla y por qué. Anteriormente, usé un makefile y al final del makefile simplemente ejecuté todas las pruebas. Primero intenté arreglar esto creando un objetivo de compilación personalizado en cmake. Sin embargo, solo ejecuta el primer comando. O bien necesito una forma de obtener una salida más detallada de CTest O necesito una forma de generar automáticamente una secuencia de comandos bash o algo similar desde CMake para ejecutar cada ejecutable de prueba de unidad. En otras palabras, tengo el archivo cmake configurado ahora, así que solo tengo que agregar la prueba de la unidad en un lugar para generar el ejecutable, y no quiero tener que acordarme de agregarlo al segundo lugar si puedo evitar eso. ¿Alguien tiene alguna experiencia que sería útil en este punto?

Muchas gracias de antemano.


Aquí está mi example . Lo he hecho como una breve guía para mi equipo de desarrollo. Quizás también le resulte útil.