CMake "Properties: Tests"의 "PASS_REGULAR_EXPRESSION" 프로그래밍


CMake "Properties: Tests"의 "PASS_REGULAR_EXPRESSION" 프로그래밍

구문:

set_tests_properties(TEST_NAME PROPERTIES PASS_REGULAR_EXPRESSION REGEX1 REGEX2 ...)

여기서:

  • TEST_NAME은 테스트 이름입니다.
  • REGEX1, REGEX2 등은 테스트 출력과 일치해야 하는 정규 표현식입니다.

예제:

다음 예제에서는 MyTest라는 테스트의 출력이 "Test Passed"라는 문구와 일치하는지 확인합니다.

add_test(NAME MyTest COMMAND my_test_program)
set_tests_properties(MyTest PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed")

여러 정규 표현식 사용:

테스트 출력이 여러 정규 표현식 중 하나 이상과 일치해야 하는 경우 여러 정규 표현식을 공백으로 구분하여 지정할 수 있습니다.

set_tests_properties(MyTest PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed" "Error: [0-9]+")

주의 사항:

  • PASS_REGULAR_EXPRESSION 속성은 테스트 프로세스의 종료 코드를 무시합니다. 즉, 테스트 프로세스가 0이 아닌 코드로 종료되더라도 테스트 출력이 지정된 정규 표현식과 일치하면 테스트는 합격 처리됩니다.
  • PASS_REGULAR_EXPRESSION 속성을 사용하려면 CMake 버전 3.0 이상이 필요합니다.

참고 자료:

추가 정보:

  • FAIL_REGULAR_EXPRESSION 속성은 테스트 출력이 지정된 정규 표현식과 일치하면 테스트를 실패 처리하는 데 사용됩니다.
  • TIMEOUT 속성은 테스트 실행 시간 제한을 설정하는 데 사용됩니다. 테스트가 시간 제한을 초과하면 실패 처리됩니다.


CMake "Properties: Tests"의 "PASS_REGULAR_EXPRESSION" 관련 샘플 코드

예제 1: 테스트 출력이 "Test Passed"와 일치하는지 확인

cmake_minimum_required(VERSION 3.0)

add_test(NAME MyTest COMMAND my_test_program)
set_tests_properties(MyTest PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed")

예제 2: 테스트 출력이 "Test Passed" 또는 "Error: [0-9]+"와 일치하는지 확인

cmake_minimum_required(VERSION 3.0)

add_test(NAME MyTest COMMAND my_test_program)
set_tests_properties(MyTest PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed" "Error: [0-9]+")

예제 3: "PASS_REGULAR_EXPRESSION"와 "FAIL_REGULAR_EXPRESSION" 함께 사용

cmake_minimum_required(VERSION 3.0)

add_test(NAME MyTest COMMAND my_test_program)
set_tests_properties(MyTest PROPERTIES 
  PASS_REGULAR_EXPRESSION "Test Passed"
  FAIL_REGULAR_EXPRESSION "Error: [0-9]+"
)

예제 4: "TIMEOUT" 속성과 함께 사용

cmake_minimum_required(VERSION 3.0)

add_test(NAME MyTest COMMAND my_test_program)
set_tests_properties(MyTest PROPERTIES 
  PASS_REGULAR_EXPRESSION "Test Passed"
  FAIL_REGULAR_EXPRESSION "Error: [0-9]+"
  TIMEOUT 5
)

참고:

  • 이 예제들은 단순한 예시이며 실제 프로젝트에서는 상황에 맞게 수정해야 할 수 있습니다.
  • 테스트 프로그램 및 정규 표현식은 테스트 대상 코드 및 테스트 목표에 따라 변경해야 합니다.


"PASS_REGULAR_EXPRESSION"의 대안

다음은 "PASS_REGULAR_EXPRESSION"의 대안으로 사용할 수 있는 몇 가지 방법입니다.

"CHECK_OUTPUT" 매크로 사용:

"CHECK_OUTPUT" 매크로는 명령줄 프로그램의 출력을 확인하는 데 사용할 수 있습니다. 이 매크로는 출력 내용을 문자열과 일치시키거나, 정규 표현식과 일치시키거나, 오류 코드를 확인하는 등 다양한 방법으로 사용할 수 있습니다.

add_test(NAME MyTest COMMAND my_test_program)
check_output(TEST_RESULT 0 "my_test_program" STDOUT)

맞춤형 테스트 도구 사용:

특정한 테스트 시나리오를 처리하기 위해 맞춤형 테스트 도구를 개발할 수 있습니다. 이 도구는 테스트 프로그램의 출력을 분석하고 테스트 합격 여부를 판단하는 데 사용할 수 있습니다.

"CTest" GUI 사용:

"CTest" GUI를 사용하면 테스트 결과를 직접 확인하고 테스트 합격 여부를 판단할 수 있습니다.

"Catch2" 또는 "Boost Test"와 같은 테스트 프레임워크 사용:

"Catch2" 또는 "Boost Test"와 같은 테스트 프레임워크는 "PASS_REGULAR_EXPRESSION"보다 더 유연하고 강력한 테스트 기능을 제공합니다. 이러한 프레임워크는 테스트 작성, 실행 및 관리를 쉽게 해줍니다.

"PASS_REGULAR_EXPRESSION" 사용 시 고려 사항:

  • "PASS_REGULAR_EXPRESSION"은 단순한 문자열 일치만 지원합니다. 정규 표현식의 모든 기능을 활용하고 싶다면 "CHECK_OUTPUT" 매크로 또는 맞춤형 테스트 도구를 사용하는 것이 좋습니다.
  • "PASS_REGULAR_EXPRESSION"은 테스트 프로그램의 종료 코드를 무시합니다. 테스트 프로그램의 종료 코드 또한 고려해야 하는 경우 "CHECK_OUTPUT" 매크로를 사용하는 것이 좋습니다.

"PASS_REGULAR_EXPRESSION" 대안을 선택할 때는 다음과 같은 요소들을 고려해야 합니다.

  • 테스트 시나리오의 복잡성
  • 필요한 테스트 기능
  • 개인적 선호