CTest com vários comandos
Pergunta
Eu estou construindo alguns testes usando CTest.Normalmente, eu posso configurar o teste simplesmente a linha:
ADD_TEST(Test_Name executable args)
No entanto, eu tenho um problema, eu tenho alguns testes que exigem dois comandos a serem executados em ordem para que ele funcione, existe alguma maneira que eu possa executar dois programas dentro de um único ctest, ou eu sou obrigado a criar um novo teste para cada um?
Obrigado.
Solução
O add_test
comando só aceita um executável, mas você pode correr qualquer executável que é realmente um script.Para fazer isso em uma plataforma cruzada forma, escrever o script em CMake si.O CMake tem o -P
opção para a execução arbitrária de fragmentos da CMake linguagem de script quando você executar make
ou make test
, em vez de Makefile tempo de geração.
Infelizmente você não pode passar argumentos para tal script.Mas você pode definir variáveis de valores, que é tão bom.
Este script você pode chamar runtests.cmake
, ele executa os comandos CMD1 CMD2 e e verifica cada uma para um tipo de retorno diferente de zero código, retornando fora do CMake-se com um erro se o que acontece:
macro(EXEC_CHECK CMD)
execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)
message(FATAL_ERROR "Error running ${CMD}")
endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})
...e, em seguida, adicionar os seus casos de teste, como por exemplo:
add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
COMMAND ${CMAKE_COMMAND}
-DCMD1=$<TARGET_FILE:test1>
-DCMD2=$<TARGET_FILE:test2>
-P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)
$<TARGET_FILE:test1>
fica expandiu-se para o caminho completo para o executável em build-a geração de arquivo de tempo.Quando você executar make test
ou equivalente, esta será executado "cmake -P runtests.o cmake" definir o CMD1 CMD2 e variáveis adequadas para o teste de programas.O script, em seguida, executará o 2 programas em seqüência.Se um dos programas de teste falhar, o teste falha.Se você precisa ver o resultado do teste, você pode executar make test ARGS=-V