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


109

내 프로젝트를 빌드하기 위해 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 단위 테스트를 사용하는 더 좋은 방법이 있습니까?


답변:


92

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

env CTEST_OUTPUT_ON_FAILURE=1 make check

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


3
나를 위해 작동하지 않습니다 (ctest 버전 2.8.12.1). 나는 시도 SET(CTEST_OUTPUT_ON_FAILURE TRUE)하고 SET(CTEST_OUTPUT_ON_FAILURE ON)있지만 효과가 없습니다. 웹의 다른 보고서에서는 이것이 손상되었음을 확인합니다.
Joachim W

4
@JoachimWuttke set(CTEST_OUTPUT_ON_FAILURE TRUE)환경 변수를 설정하지 않습니다 . 명령 줄에서 시도해보십시오 : CTEST_OUTPUT_ON_FAILURE=TRUE make test.
thehouse 2014-06-21

3
make CTEST_OUTPUT_ON_FAILURE=1 test더 짧고 더 좋은 IMO입니다.
Timmmm

Windows 배치 파일에서 호출하는 동안 CTEST_OUTPUT_ON_FAILURE = 1을 사용하는 방법-msbuild /toolsversion:15.0 / p : Configuration = Release / p : Platform = x64 TESTS.vcxproj
Toral

34

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

ctest --verbose

29
  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 사용자 정의"섹션으로 이동하십시오. 행운을 빕니다!


1
괜찮 감사. ctest를 위해 프로젝트 / 메이크 파일에 삽입 된 플래그를 수정하는 방법이 있기를 바랐지만 아무것도 찾지 못했고 귀하의 대답이이를 확인하는 것 같습니다. 파일 이름 정보가 도움이됩니다!
Skrymsli 2011

1
어딘가에 ctest 2.8.10가 CTEST_CUSTOM_POST_TEST 볼에 인수 외부 명령을 사용하여 부러 github.com/openscad/openscad/issues/260
밝은 돈

@don : 아마도 그들은 ctest에서 충분한 테스트를 실행하고 있지 않을 것입니다 ;-)
Joachim W

CTEST_CUSTOM_POST_TEST와 관련된 CMake 문제는 2.8.12에서 수정되었습니다.
Ela782 2014-08-16

23

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

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

21

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

ctest --output-on-failure

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

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

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


1
나는 당신의 솔루션을 매우 좋아합니다. 실패를 제외하고는 장황하지 않습니다.
AnthonyD973

19

make check CTEST_OUTPUT_ON_FAILURE=TRUE


6
모든 다운 투표는 다소 놀랍습니다. 이것은 허용 된 답변과 거의 동일하지만 더 짧고 더 좋습니다. 내가 테스트 한 프로젝트에서도 작동합니다.
zbyszek

2
CTEST_OUTPUT_ON_FAILURE = 1 시험을
알렉스 Punnen

11

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

make test ARGS="-V"

10

내 방법은 답변의 조합 ONY에서 , zbyszek에서 , 그리고 TARC에서 . 를 사용하여 실제 ctest 명령을 호출하는 인수 ${CMAKE_COMMAND}와 함께 변수 (호출 된 cmake 실행 파일의 절대 경로로 설정 됨)를 -E env CTEST_OUTPUT_ON_FAILURE=1사용 ${CMAKE_CTEST_COMMAND} -C $<CONFIG>합니다. 진행중인 작업을 명확히하기 위해 cmake -E echo현재 작업 디렉터리와 호출 할 ctest 명령을 표시하는 세 가지 명령으로 시작 합니다. 내가 부르는 방법은 다음과 같습니다 add_custom_target.

add_custom_target(check 
        ${CMAKE_COMMAND} -E echo CWD=${CMAKE_BINARY_DIR}
        COMMAND ${CMAKE_COMMAND} -E echo CMD=${CMAKE_CTEST_COMMAND} -C $<CONFIG>
        COMMAND ${CMAKE_COMMAND} -E echo ----------------------------------
        COMMAND ${CMAKE_COMMAND} -E env CTEST_OUTPUT_ON_FAILURE=1
            ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    DEPENDS ALL_BUILD
    )

이것은 테스트 오류가 클릭 가능한 컴파일 오류로 표시되는 MSVC IDE에서 잘 작동합니다. 에 대한 문서는 cmake -E env 를 참조하십시오 .cmake -E휴대용 명령 줄 도구 모드에 . 또한 대상을 ALL_BUILD호출하기 전에 모든 프로젝트가 빌드되도록 종속성을 추가합니다 check. (리눅스는 하나가 교체해야 빌드 ALL_BUILD와 함께 ALL;. 나는 아직 리눅스에서이 테스트를하지 않은 경우)


6

Visual Studio를 사용하는 사람들을 위해 여기에 테마에 대한 또 다른 변형 (해킹)이 있습니다.

cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS

0

XML 파일로 결과를 표시하려면 다음 명령으로 테스트를 실행해야합니다.

~$ ctest -T Test

Testing / 1234123432 / test.xml에서 결과를 찾았고 다른 파일도 Testing 폴더에 생성됩니다.


0

ctest -VV 또는 ctest --extra-verbose

에서 문서 :

테스트에서 더 자세한 출력을 사용합니다.

테스트 출력은 일반적으로 표시되지 않으며 요약 정보 만 표시됩니다. 이 옵션은 더 많은 테스트 출력을 표시합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.