Estoy usando CMake para construir mi proyecto. He agregado un binario de prueba unitaria que utiliza el marco de prueba unitario Boost. Este binario contiene todas las pruebas unitarias. He agregado ese binario para que lo ejecute CTest:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
Pero el resultado de la compilación en Visual Studio solo muestra el resultado de ejecutar CTest:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Esto no es muy útil, porque no puedo ver qué prueba falló. Si ejecuto ctest manualmente desde la línea de comando --verbose
, obtengo el resultado de una prueba unitaria de Boost que dice lo que realmente falló:
1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed 0.00 sec
Entonces, ¿qué necesito cambiar en CMakeLists.txt para que CTest se ejecute --verbose
en todo momento? ¿Existe una mejor manera de usar las pruebas unitarias de Boost con CMake / CTest?
Respuestas:
Puede establecer la variable de entorno
CTEST_OUTPUT_ON_FAILURE
, que le mostrará cualquier resultado del programa de prueba cuando la prueba falle. Una forma de hacer esto al usar Makefiles y la línea de comando sería la siguiente:Esta pregunta y respuesta de Stack Overflow muestra cómo establecer variables de entorno en Visual Studio.
fuente
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
ySET(CTEST_OUTPUT_ON_FAILURE ON)
, pero no tuvo ningún efecto. Otros informes en la web corroboran que esto está roto.set(CTEST_OUTPUT_ON_FAILURE TRUE)
no establece una variable de entorno . Pruebe esto en la línea de comandos:CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
es más corto y agradable en mi opinión.Puede llamar
ctest
directamente, después de hacer cmaking y realizar su proyecto.fuente
Puede consultar la
Testing/Temporary
subcarpeta. Se crea automáticamente después de ejecutar make test. Esta carpeta contiene dos archivos:LastTest.log
yLastTestsFailed.log
.LastTest.log
contiene la salida deseada para ejecutar pruebas.LastTestFailed.log
contiene nombres de pruebas fallidas. Para que pueda verificarlos manualmente después de ejecutarmake test
.La segunda forma es hacer que ctest le muestre el contenido de los archivos de registro después de ejecutar las pruebas:
colocar en el directorio de compilación (desde el cual se ejecuta
make test
) el archivo CTestCustom.ctest (puede hacerlo con el comando configure file , por ejemplo) con los siguientes contenidosCTEST_CUSTOM_POST_TEST ("Prueba de gato / Temporal / Última prueba.log")
En lugar de cat, puede usar cualquier comando cmd de Windows que haga cosas similares.
make test
nuevo y obtén ganancias!Puede encontrar información adicional sobre cómo personalizar ctest aquí . Simplemente pase a la sección "Personalización de cmake". ¡Buena suerte!
fuente
Tuve que agregar el objetivo de "verificación" por mí mismo. "hacer pruebas" no hace nada por alguna razón. Entonces, lo que hice (como se sugirió en algún lugar de stackoverflow): agregué este objetivo manualmente. Para obtener un resultado detallado, lo escribí como:
fuente
Existe una solución muy simple (que por alguna razón es difícil de encontrar a través de la Búsqueda de Google):
Si usa CMake con la función de carpeta abierta de Visual Studio, puede agregar la
ajuste a su configuración de compilación.
fuente
make check CTEST_OUTPUT_ON_FAILURE=TRUE
fuente
Esto hace que la salida de la prueba sea más detallada:
fuente
Mi enfoque es una combinación de las respuestas de ony , de zbyszek y de tarc . Utilizo la
${CMAKE_COMMAND}
variable (que se establece en la ruta absoluta al ejecutable cmake invocado) con el-E env CTEST_OUTPUT_ON_FAILURE=1
argumento para invocar el comando ctest real usando${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Para ayudar a aclarar lo que está sucediendo, comienzo con trescmake -E echo
comandos para mostrar el directorio de trabajo actual y el comando ctest que se va a invocar. Así es como llamoadd_custom_target
.Esto funciona bien con MSVC IDE donde los errores de prueba se muestran como errores de compilación en los que se puede hacer clic. Consulte cmake -E env para obtener documentación sobre el
cmake -E
modo de herramienta de línea de comandos portátil. También agrego una dependenciaALL_BUILD
para que todos los proyectos se compilen antes de invocar elcheck
objetivo. (En las compilaciones de Linux, es posible que deba reemplazarseALL_BUILD
conALL
; aún no lo he probado en Linux).fuente
Para las personas que usan Visual Studio, aquí hay otra variación (truco) del tema:
fuente
para mostrar el resultado con archivo XML tienes que ejecutar la prueba con el siguiente comando
y encontramos el resultado en Testing / 1234123432 / test.xml y otros archivos también se generan en la Carpeta de prueba
fuente
ctest -VV
octest --extra-verbose
De la documentación :
fuente