c++ - google - Capturar la integración de lib(prueba de unidad) y CTest(CMake)
c++ unit test (2)
La integración de Catch con CMake es bastante simple, ya que es una biblioteca de solo encabezado.
Aquí hay un resumen rápido de lo que tiene que hacer:
También puede suponer que las fuentes de Captura ya están instaladas en la máquina de compilación o usar ExternalProject para recuperarlas como parte del proceso de compilación.
En cualquier caso, terminará con los archivos de encabezado Catch en algún directorio conocido en su máquina de compilación. Recomendaría crear un objetivo de interfaz para hacer que esta información sea conocida por los ejecutables de prueba:
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})
De esta forma, simplemente puede especificar Catch como dependencia a target_link_libraries
:
add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test Catch)
Como es habitual con CMake, add_test
se encarga de presentar las pruebas a CTest:
enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)
Y eso es todo. Ejecute make test
en el proyecto construido para ejecutar sus pruebas.
Tengo un proyecto en Github que hace esto si necesita ver un ejemplo completo de trabajo.
Estoy buscando un ejemplo exitoso de la integración de CatchLib Catch con CMake Test (Ctest). como entiendo, este es un script cmake adicional que tiene que analizar la salida de la aplicación? ¿Alguien ya ha escrito esto? probablemente compartió esto?
===============================================
actualización (se ha encontrado una solución):
He asignado el script cmake a CatchLib, para la captura de integración con CTest. esta es una versión simplificada del script cmake de Fraser99 aquí
Puede hacer que su proyecto CMake dependa de Catch utilizando find_package
. De esta forma, no incluye Catch yourself y puede actualizarlo de forma independiente. El proceso se explica en esta receta , excepto que en este caso no es necesario tratar con las bibliotecas, ya que Catch es solo encabezado.
CMakeLists.txt (suponiendo que tiene su FindCatch.cmake en su lugar [ver abajo] y sus pruebas en my_tests.cpp):
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(Catch REQUIRED)
include_directories(${CATCH_INCLUDE_DIRS})
add_executable(my_tests my_tests.cpp)
add_test(NAME MyTests COMMAND my_tests)
Un ejemplo my_tests.cpp :
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main()
#include "catch/catch.hpp"
#include "stuff_to_test.h"
TEST_CASE("A test case")
{
...
}
...
Deberá agregar un módulo FindCatch.cmake a su proyecto, en cmake/Modules
. Busque en la web FindCatch.cmake.
Finalmente, puedes construir y ejecutar las pruebas con make test
.
EDITAR: Alternativamente, puedes hacer que cmake descargue Catch from git durante la compilación, siguiendo estas instrucciones de Catch''s github. Esto requiere una dependencia en git sin embargo.