testing - CMake: configuración de una variable de entorno para ctest(o de otro modo obtener resultados de prueba fallidos de ctest/make test automáticamente)
environment-variables output (1)
El objetivo de test
integrado no se puede modificar, pero puede agregar un objetivo de check
personalizado que invoca a ctest
con el --output-on-failure
de la siguiente manera:
if (CMAKE_CONFIGURATION_TYPES)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
--force-new-ctest-process --output-on-failure
--build-config "$<CONFIGURATION>")
else()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
--force-new-ctest-process --output-on-failure)
endif()
El objetivo personalizado debe configurarse de forma diferente para el tipo de compilación individual y las compilaciones de varias configuraciones. En el último caso, la configuración de compilación activa debe pasarse a la invocación de ctest
utilizando el --build-config
. El --force-new-ctest-process
es utilizado por el objetivo de test
incorporado por defecto.
Quiero que ctest me muestre el resultado de las pruebas fallidas por defecto. Es decir, quiero correr:
$ make all test
y ver cualquier salida de pruebas fallidas sin tener que pasar por cat Testing/Temporary/LastTest.log
.
Parece que hay dos formas de hacer esto:
(1) Configurando la variable de entorno CTEST_OUTPUT_ON_FAILURE
:
$ CTEST_OUTPUT_ON_FAILURE=1 make all test
$ # or CTEST_OUTPUT_ON_FAILURE=1 ctest
(2) Especificando el --output-on-failure
en la invocación de ctest
:
$ ctest --output-on-failure
¿Hay alguna manera de escribir un archivo CMakeLists.txt de modo que ctests dumps fallen test output por defecto en una invocación normal de "make all test" SIN recurrir a exportar la variable ambiental globalmente en la sesión o recurrir a un objetivo personalizado como make check
( como se describe here )?
SET_TESTS_PROPERTIES()
comando SET_TESTS_PROPERTIES()
, pero lo intento así:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(testenv CXX)
ENABLE_TESTING()
ADD_EXECUTABLE(hello hello.cpp)
ADD_TEST(testhello hello)
# Following sets the environment variable for the shell in which the test
# progoram ''hello'' is run, but not the shell in which ctest is run
SET_TESTS_PROPERTIES(testhello
PROPERTIES ENVIRONMENT "CTEST_OUTPUT_ON_FAILURE=1")
y la experimentación muestra que la variable del entorno se establece en el shell en el que se ejecuta el programa de prueba, pero no en el shell en el que se ejecuta ctest.