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
Testing/Temporary
하위 폴더 를 확인할 수 있습니다 . make test 실행 후 자동으로 생성됩니다. 이 폴더에는LastTest.log
및LastTestsFailed.log
.LastTest.log
테스트 실행을 위해 원하는 출력을 포함합니다.LastTestFailed.log
실패한 테스트의 이름을 포함합니다. 따라서 실행 후 수동으로 확인할 수 있습니다make test
.두 번째 방법은 테스트를 실행 한 후 ctest가 로그 파일의 내용을 표시하도록하는 것입니다.
다음 내용과 함께 CTestCustom.ctest ( 예를 들어 configure file 명령으로 수행 할 수 있음) 파일 을 빌드 디렉토리 (실행
make test
)에 배치합니다.CTEST_CUSTOM_POST_TEST ( "cat Testing / Temporary / LastTest.log")
cat 대신 유사한 작업을 수행하는 Windows cmd 명령을 사용할 수 있습니다.
make test
다시 실행 하고 이익을 얻으십시오!
ctest 사용자 정의에 대한 추가 정보는 여기에서 찾을 수 있습니다 . "cmake 사용자 정의"섹션으로 이동하십시오. 행운을 빕니다!
"체크"대상을 직접 추가해야했습니다. "make tests"는 어떤 이유로 아무것도하지 않습니다. 그래서 내가 한 일은 (스택 오버플로 어딘가에서 제안한대로)-이 대상을 수동으로 추가했습니다. 자세한 출력을 얻으려면 다음과 같이 작성했습니다.
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose)
make check CTEST_OUTPUT_ON_FAILURE=TRUE
매우 간단한 솔루션이 있습니다 (어떤 이유로 Google 검색을 통해 찾기가 어렵습니다).
ctest --output-on-failure
Visual Studio의 폴더 열기 기능과 함께 CMake를 사용하는 경우
"ctestCommandArgs": "--output-on-failure"
빌드 구성으로 설정합니다.
내 방법은 답변의 조합 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
)
This plays nice with the MSVC IDE where any test errors are shown as clickable compilation errors. See cmake -E env for documentation of the cmake -E
portable command line tool mode. I also add a dependency on ALL_BUILD
so that all projects will be built before invoking the check
target. (On Linux builds, one may need to replace ALL_BUILD
with ALL
; I have not tested this on Linux yet.)
This makes test output more verbose:
make test ARGS="-V"
For people using Visual Studio, here another variation (hack) on the theme:
cmake -E env CTEST_OUTPUT_ON_FAILURE=1 cmake --build . --target RUN_TESTS
to show the result with XML file you have to execute the test with the following command
~$ ctest -T Test
and we found the result in the Testing/1234123432/test.xml and other files are generated too in Testing Folder
참고URL : https://stackoverflow.com/questions/5709914/using-cmake-how-do-i-get-verbose-output-from-ctest
'programing tip' 카테고리의 다른 글
IList 또는 IEnumerable을 배열로 변환하는 가장 좋은 방법 (0) | 2020.09.05 |
---|---|
중첩 된 HTML 주석이 가능합니까? (0) | 2020.09.05 |
node.js가 설치되었는지 확인하는 방법 (0) | 2020.09.05 |
margin : auto 이미지를 중앙에 배치하지 않는 이유는 무엇입니까? (0) | 2020.09.05 |
디버깅 할 때 인수로 프로그램을 시작하려면 어떻게합니까? (0) | 2020.09.05 |