[cmake] CMake를 사용하여 CTest에서 자세한 출력을 얻으려면 어떻게해야합니까?

내 프로젝트를 빌드하기 위해 CMake를 사용하고 있습니다. Boost 단위 테스트 프레임 워크를 사용하는 단위 테스트 바이너리를 추가했습니다. 이 바이너리 하나에는 모든 단위 테스트가 포함됩니다. CTest에서 실행할 바이너리를 추가했습니다.

ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)

그러나 Visual Studio의 빌드 출력에는 CTest 실행 결과 만 표시됩니다.

      Start 1: UnitTests
  1/1 Test #1: UnitTests ................***Failed    0.05 sec

  0% tests passed, 1 tests failed out of 1

어떤 테스트가 실패했는지 알 수 없기 때문에 이것은별로 도움이되지 않습니다. 명령 줄에서 ctest를 수동으로 실행하면 --verbose실제로 실패한 것을 알려주는 Boost 단위 테스트에서 출력을 얻습니다.

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

그렇다면 CTest를 --verbose항상 실행하려면 CMakeLists.txt에서 무엇을 변경해야 합니까? CMake / CTest와 함께 Boost 단위 테스트를 사용하는 더 좋은 방법이 있습니까?



답변

CTEST_OUTPUT_ON_FAILURE테스트가 실패 할 때마다 테스트 프로그램의 출력을 표시 하는 환경 변수를 설정할 수 있습니다 . Makefile과 명령 줄을 사용할 때이를 수행하는 한 가지 방법은 다음과 같습니다.

env CTEST_OUTPUT_ON_FAILURE=1 make check

이 스택 오버플로 질문 및 답변 은 Visual Studio에서 환경 변수를 설정하는 방법을 보여줍니다.


답변

ctest프로젝트를 만들고 만든 후에 직접 전화 할 수 있습니다.

ctest --verbose


답변

  1. Testing/Temporary하위 폴더 를 확인할 수 있습니다 . make test 실행 후 자동으로 생성됩니다. 이 폴더에는 LastTest.logLastTestsFailed.log. LastTest.log테스트 실행을 위해 원하는 출력을 포함합니다. LastTestFailed.log실패한 테스트의 이름을 포함합니다. 따라서 실행 후 수동으로 확인할 수 있습니다 make test.

  2. 두 번째 방법은 테스트를 실행 한 후 ctest가 로그 파일의 내용을 표시하도록하는 것입니다.

    1. 다음 내용과 함께 CTestCustom.ctest ( 예를 들어 configure file 명령으로 수행 할 수 있음) 파일 을 빌드 디렉토리 (실행 make test)에 배치합니다.

      CTEST_CUSTOM_POST_TEST ( “cat Testing / Temporary / LastTest.log”)

cat 대신 유사한 작업을 수행하는 Windows cmd 명령을 사용할 수 있습니다.

  1. make test다시 실행 하고 이익을 얻으십시오!

ctest 사용자 정의에 대한 추가 정보는 여기에서 찾을 수 있습니다 . “cmake 사용자 정의”섹션으로 이동하십시오. 행운을 빕니다!


답변

“체크”대상을 직접 추가해야했습니다. “make tests”는 어떤 이유로 아무것도하지 않습니다. 그래서 내가 한 일은 (스택 오버플로 어딘가에서 제안한대로)-이 대상을 수동으로 추가했습니다. 자세한 출력을 얻으려면 다음과 같이 작성했습니다.

add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)


답변

매우 간단한 솔루션이 있습니다 (어떤 이유로 Google 검색을 통해 찾기가 어렵습니다).

ctest --output-on-failure

Visual Studio의 폴더 열기 기능과 함께 CMake를 사용하는 경우

"ctestCommandArgs": "--output-on-failure"

빌드 구성으로 설정합니다.


답변

make check CTEST_OUTPUT_ON_FAILURE=TRUE


답변

이렇게하면 테스트 출력이 더욱 상세 해집니다.

make test ARGS="-V"