Estou usando o CMake para construir meu projeto. Eu adicionei um binário de teste de unidade que está usando a estrutura de teste de unidade Boost. Este binário contém todos os testes de unidade. Eu adicionei esse binário para ser executado pelo CTest:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
Mas a saída da compilação no Visual Studio mostra apenas o resultado da execução de CTest:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Isso não é muito útil, porque não consigo ver qual teste falhou. Se eu executar o ctest manualmente na linha de comando com --verbose
, obtenho a saída de um teste de unidade Boost que diz o que realmente falhou:
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
Então, o que eu preciso mudar no CMakeLists.txt para que o CTest seja executado o --verbose
tempo todo? Existe uma maneira melhor de usar os testes de unidade Boost com CMake / CTest?
Respostas:
Você pode definir a variável de ambiente
CTEST_OUTPUT_ON_FAILURE
, que mostrará qualquer saída do programa de teste sempre que o teste falhar. Uma maneira de fazer isso ao usar Makefiles e a linha de comando seria a seguinte:Esta pergunta e resposta do Stack Overflow mostra como definir variáveis de ambiente no Visual Studio.
fonte
SET(CTEST_OUTPUT_ON_FAILURE TRUE)
eSET(CTEST_OUTPUT_ON_FAILURE ON)
, mas não surtiu efeito. Outros relatos na web corroboram que isso está quebrado.set(CTEST_OUTPUT_ON_FAILURE TRUE)
não define uma variável de ambiente . Tente isto na linha de comando:CTEST_OUTPUT_ON_FAILURE=TRUE make test
.make CTEST_OUTPUT_ON_FAILURE=1 test
é IMO mais curto e mais agradável.Você pode ligar
ctest
diretamente, depois de fazer e fazer seu projeto.fonte
Você pode verificar a
Testing/Temporary
subpasta. Ele é criado automaticamente após a execução de make test. Esta pasta contém dois arquivos:LastTest.log
eLastTestsFailed.log
.LastTest.log
contém a saída desejada para testes de execução.LastTestFailed.log
contém nomes de testes que falharam. Assim, você pode verificá-los manualmente após a execuçãomake test
.A segunda maneira é fazer com que o ctest mostre o conteúdo dos arquivos de log após a execução dos testes:
coloque no diretório de construção (a partir do qual você executa
make test
) o arquivo CTestCustom.ctest (você pode fazer isso com o comando configure file , por exemplo) com o seguinte conteúdoCTEST_CUSTOM_POST_TEST ("Cat Testing / Temporary / LastTest.log")
Em vez de cat, você pode usar qualquer comando cmd do Windows que faça coisas semelhantes.
make test
novamente e obtenha lucro!informações adicionais sobre como personalizar ctest você pode encontrar aqui . Basta ir até a seção "Customizando cmake". Boa sorte!
fonte
Tive de adicionar o alvo "verificar" sozinho. "fazer testes" não faz nada por algum motivo. Então o que eu fiz (como foi sugerido em algum lugar no stackoverflow) - eu adicionei este destino manualmente. Para obter uma saída detalhada, escrevi assim:
fonte
Existe uma solução muito simples (que por algum motivo é difícil de encontrar na Pesquisa Google):
Se você usar o CMake com a função de abrir pasta do Visual Studio, poderá adicionar o
definição para sua configuração de compilação.
fonte
make check CTEST_OUTPUT_ON_FAILURE=TRUE
fonte
Isso torna a saída do teste mais detalhada:
fonte
Minha abordagem é uma combinação das respostas de ony , de zbyszek e de tarc . Eu uso a
${CMAKE_COMMAND}
variável (que é definida como o caminho absoluto para o executável cmake invocado) com o-E env CTEST_OUTPUT_ON_FAILURE=1
argumento para invocar o comando ctest real usando${CMAKE_CTEST_COMMAND} -C $<CONFIG>
. Para ajudar a esclarecer o que está acontecendo, começo com trêscmake -E echo
comandos para mostrar o diretório de trabalho atual e o comando ctest a ser chamado. É assim que eu chamoadd_custom_target
.Isso funciona bem com o IDE MSVC, onde quaisquer erros de teste são mostrados como erros de compilação clicáveis. Consulte cmake -E env para obter a documentação do
cmake -E
modo de ferramenta de linha de comando portátil. Também adiciono uma dependência deALL_BUILD
para que todos os projetos sejam construídos antes de invocar ocheck
destino. (Em compilações do Linux, pode ser necessário substituirALL_BUILD
porALL
; ainda não testei isso no Linux.)fonte
Para quem usa o Visual Studio, aqui está outra variação (hack) do tema:
fonte
para mostrar o resultado com o arquivo XML você deve executar o teste com o seguinte comando
e encontramos o resultado em Testing / 1234123432 / test.xml e outros arquivos são gerados também na pasta Testing
fonte
ctest -VV
ouctest --extra-verbose
Da documentação :
fonte