CTest 개요

CTest는 CMake의 테스트 도구로, 소프트웨어 테스트를 자동화하는 데 사용된다. CMake는 빌드 자동화 도구로서, 다양한 플랫폼에서 프로젝트를 빌드하고 구성하는 데 사용된다. CTest는 이러한 CMake와 연동되어 테스트를 관리하고 실행하는 역할을 수행한다. 이를 통해 소프트웨어 개발 과정에서 발생할 수 있는 오류를 사전에 검출하고, 품질을 향상시킬 수 있다.

CTest의 주요 기능

CTest는 다양한 기능을 제공하여 테스트를 자동화하고, 테스트 결과를 분석하는 데 도움을 준다. 주요 기능은 다음과 같다.

  1. 테스트 스크립트 관리: CTest는 CMake와의 통합을 통해 테스트 스크립트를 쉽게 관리할 수 있다. CMakeLists.txt 파일에서 테스트를 정의하고, 이를 통해 다양한 테스트 케이스를 자동으로 관리할 수 있다.

  2. 테스트 실행: CTest는 정의된 테스트 케이스를 실행하고, 그 결과를 출력한다. 각 테스트 케이스는 독립적으로 실행되며, 실패한 테스트는 로그를 통해 원인을 파악할 수 있다.

  3. 병렬 테스트 실행: CTest는 병렬로 테스트를 실행할 수 있어 테스트 시간을 단축할 수 있다. 이를 통해 대규모 프로젝트에서도 효율적으로 테스트를 수행할 수 있다.

  4. 테스트 결과 분석: CTest는 테스트 실행 후 결과를 상세히 분석할 수 있는 기능을 제공한다. 테스트 통과 여부, 실패한 테스트의 로그, 실행 시간 등의 정보를 제공하여 문제를 신속하게 해결할 수 있다.

  5. CI/CD 통합: CTest는 CI/CD 파이프라인과 쉽게 통합되어 지속적인 테스트와 배포 자동화를 지원한다. 이를 통해 코드 변경 사항에 대한 빠른 피드백을 제공하고, 품질을 유지할 수 있다.

CTest 사용 방법

CTest를 사용하기 위해서는 먼저 CMakeLists.txt 파일에 테스트를 정의해야 한다. 이 과정은 CMake의 add_test() 함수를 통해 이루어진다.

테스트 정의

CMakeLists.txt 파일에서 테스트는 다음과 같이 정의할 수 있다:

add_test(NAME MyTest COMMAND MyTestExecutable)

여기서 MyTest는 테스트 이름이며, MyTestExecutable은 실행할 테스트 프로그램이다. 이 테스트는 CTest에 의해 실행되며, 결과는 CTest가 관리하게 된다.

테스트 실행

테스트를 실행하려면 CMake 빌드 디렉토리에서 ctest 명령어를 사용하면 된다. 예를 들어:

ctest

이 명령어는 현재 디렉토리의 모든 테스트를 실행하고 결과를 출력한다.

병렬 테스트 실행

병렬로 테스트를 실행하려면 -j 옵션을 사용할 수 있다:

ctest -j4

이 명령어는 4개의 테스트를 동시에 실행한다. 병렬 실행은 테스트 시간이 긴 경우 매우 유용하다.

CTest와 CMake 통합

CTest는 CMake와 긴밀하게 통합되어 있어, 빌드 시스템의 일부로 자연스럽게 테스트를 포함시킬 수 있다. ENABLE_TESTING() 명령어를 사용하여 CMake 프로젝트에서 테스트 기능을 활성화할 수 있다.

enable_testing()

이 명령어는 CMake 프로젝트에서 CTest를 활성화하여, 이후 add_test() 등을 통해 테스트를 추가할 수 있게 해준다.

테스트 결과 보고

CTest는 테스트 결과를 다양한 형식으로 보고할 수 있다. 기본적으로 콘솔에 결과를 출력하며, XML 형식으로 저장하여 외부 도구에서 분석할 수도 있다. 예를 들어, Jenkins와 같은 CI 도구와 연동하여 테스트 결과를 시각화할 수 있다.

ctest -T Test

이 명령어는 테스트를 실행하고 결과를 XML 파일로 저장한다.

CTest 고급 기능

CTest는 기본적인 기능 외에도 고급 기능을 제공한다. 예를 들어, ctest --rerun-failed 명령어를 사용하여 실패한 테스트만 다시 실행할 수 있다. 이는 대규모 테스트 스위트에서 시간을 절약하는 데 유용하다.

또한, ctest --output-on-failure 옵션을 사용하여 실패한 테스트에 대한 자세한 출력을 확인할 수 있다. 이는 디버깅에 매우 도움이 된다.


관련 자료: