2010-11-28 7 views
14

Mi proyecto utiliza CMake como su sistema de compilación, y quiero que ejecute mis casos de prueba de Boost.Test.¿Cómo puedo usar Boost.Test en un proyecto basado en CMake?

¿Cómo puedo lograr eso? En Boost.Build, que podría hacerlo de la siguiente manera:

import testing ; 

use-project /my_lib : ../src ; 

unit-test my_test 
      : my_test.cpp 
      /my_lib 
      boost_unit_test_framework 
     ; 

lib boost_unit_test_framework ; 

Respuesta

14

CMake en sí es solo un sistema de compilación; CTest es un corredor de prueba que está integrado con CMake. Tampoco es un marco de prueba de unidad; ese trabajo puede ser hecho por Boost.Test o googletest.

Para usar un programa de prueba de unidad basado en Boost.Test en un proyecto de CMake, primero tendríamos CMake construir y enlazar su binario prueba de la unidad, utilizando add_executable y target_link_libraries en el script CMakeLists.txt. Luego, puede agregar el binario de la prueba unitaria a la lista de pruebas para que CTest se ejecute con enable_testing y add_test.

Si desea obtener realmente de lujo, puede mirar a través de la documentación CMake de cómo tener CMake de búsqueda a través de todos los archivos de origen para encontrar y construir pruebas de unidad de forma automática, pero lo primero es lo primero ...

+0

¡Gracias, eso funcionó! – forneo

+0

+1 para esta información. ¿Podría explicar cómo [construir automáticamente pruebas unitarias] (http://stackoverflow.com/q/16857517/819272)? – TemplateRex

-2

Ver los proyectos de prueba CRealice y/o el material CTest en la documentación/libro CMake.

+0

Ese parece ser un marco de prueba diferente, ¿no hay forma de utilizar Boost.Test? – forneo

+0

La respuesta correcta es que debe usar CTest. Si lo hace, podrá hacer 'make test' y/o usar ctest, con/sin el tablero, para compilar y ejecutar cualquier programa que desee. De nuevo, mira en la documentación de CMake. –

10

I He hecho algunos módulos en https://github.com/rpavlik/cmake-modules/, incluyendo algunos para integrar la prueba de refuerzo. Consulte el archivo léame en ese informe para obtener información sobre la forma más fácil de usarlos.

Luego, querría hacer lo siguiente, suponiendo que test_DimensionedQuantities.cpp es una fuente de controlador de prueba boost.test.

include(BoostTestTargets) 
add_boost_test(DimensionedQuantities 
SOURCES 
test_DimensionedQuantities.cpp) 

Esto agrega una sola prueba de CTest-visible que falla si falla cualquiera de las pruebas de refuerzo. Si tiene pruebas que pueden especificarse por su nombre para el piloto de pruebas (las macros simples entran en esta categoría), se puede hacer algo como esto:

include(BoostTestTargets) 
add_boost_test(DimensionedQuantities 
SOURCES 
test_DimensionedQuantities.cpp 
TESTS 
CheckCollision 
BodyPoseNotCorrupted 
CheckGraspTransform 
BodyFollowsMockManip1D 
BodyFollowsMockManip2D 
BodyFollowsMockManip3D) 

Hay un montón más opciones, incluyendo la configuración de una cabecera de elija la mejor opción de una: versión incluida de UTF, b: enlace estático o c: enlace dinámico, así como enlace con bibliotecas, etc. Simplemente mire en el archivo cmake para obtener información.

Cuestiones relacionadas