TDD 테스트주도개발/TDD for C++

[GoogleTest문법1]매크로 종류

CodeMasterSong 2025. 3. 6. 01:01
반응형

Google Test의 주요 매크로

Google Test는 테스트를 작성할 때 다양한 매크로를 제공합니다. 주요 매크로는 다음과 같습니다. 세부적인 코드작성 방법을 익히기위해 각 매크로 종류가 어떤 것들이 있는지 먼저 매크로 이름과 용도를 가볍게 알아둘 필요가 있습니다. 

gtest1


1. 기본 테스트 정의 매크로

    • TEST(TestSuiteName, TestName)
      단일 테스트 케이스를 정의합니다.
      예시:여기서 MathTest는 테스트 그룹(스위트) 이름이고, Addition은 개별 테스트의 이름입니다.
TEST(MathTest, Addition) {
    EXPECT_EQ(2 + 2, 4);
}
  • TEST_F(TestFixtureName, TestName)
    테스트 픽스처(공통의 초기화 및 정리 코드가 필요한 경우)를 사용하는 테스트 케이스를 정의합니다.
    픽스처 클래스를 상속받아 공통 자원을 설정하고, 각 테스트 케이스마다 동일한 환경을 재사용할 수 있습니다.
  • TEST_P(TestSuiteName, TestName)
    파라미터화된 테스트를 작성할 때 사용합니다. 하나의 테스트 케이스를 여러 파라미터 값에 대해 반복 실행할 수 있도록 하여, 다양한 입력에 대해 동일한 로직을 검증할 수 있습니다.
  • TYPED_TEST(TestSuiteName, TestName)
    동일한 테스트 코드를 여러 타입에 대해 실행하고자 할 때 사용합니다.
    예를 들어, 템플릿 클래스를 테스트할 때 유용합니다.

2. 기대값 확인 매크로 (EXPECT_ 시리즈)

EXPECT_ 매크로들은 검사 실패 시에도 테스트 함수 내의 나머지 코드 실행을 계속하며, 최종 보고서에 실패 내용을 기록합니다.

  • EXPECT_EQ(expected, actual)
    두 값이 같은지 비교합니다.
    예시: EXPECT_EQ(5, func());
  • EXPECT_NE(val1, val2)
    두 값이 서로 다른지 검사합니다.
  • EXPECT_LT(val1, val2)
    첫 번째 값이 두 번째 값보다 작은지 확인합니다.
  • EXPECT_LE(val1, val2)
    첫 번째 값이 두 번째 값보다 작거나 같은지 검사합니다.
  • EXPECT_GT(val1, val2)
    첫 번째 값이 두 번째 값보다 큰지 검사합니다.
  • EXPECT_GE(val1, val2)
    첫 번째 값이 두 번째 값보다 크거나 같은지 확인합니다.
  • EXPECT_TRUE(condition)
    조건이 참인지 검사합니다.
  • EXPECT_FALSE(condition)
    조건이 거짓인지 확인합니다.
  • EXPECT_STREQ(expected_str, actual_str)
    C 스타일 문자열의 동일성을 비교합니다.
  • EXPECT_NEAR(val1, val2, abs_error)
    두 값이 지정한 허용 오차(abs_error) 범위 내에서 같은지 검사합니다.

3. 중단 검사 매크로 (ASSERT_ 시리즈)

ASSERT_ 매크로는 검사 실패 시 현재 테스트 함수의 실행을 즉시 중단합니다. 이후 코드 실행이 필요 없는 경우에 사용하여, 추가 오류로 인한 혼선을 방지할 수 있습니다.

  • ASSERT_EQ(expected, actual)
    두 값이 같은지 비교하며, 실패 시 함수 실행을 중단합니다.
  • ASSERT_NE(val1, val2), ASSERT_LT(val1, val2), ASSERT_LE(val1, val2), ASSERT_GT(val1, val2), ASSERT_GE(val1, val2)
    각각의 비교 조건에 대해 검사하며, 조건이 맞지 않으면 즉시 테스트 함수 실행을 중단합니다.
  • ASSERT_TRUE(condition) / ASSERT_FALSE(condition)
    조건이 참 또는 거짓임을 검사합니다.
  • ASSERT_STREQ(expected_str, actual_str)
    C 스타일 문자열 비교를 수행하고, 실패 시 함수 실행을 중단합니다.
  • ASSERT_NEAR(val1, val2, abs_error)
    두 값이 허용 오차 범위 내에 있는지 검사합니다.

4. 예외 및 에러 관련 매크로

코드에서 예외 발생 여부를 검증할 때 사용합니다.

  • EXPECT_THROW(statement, exception_type)
    주어진 statement가 실행될 때, 특정 exception_type 예외가 발생하는지 검사합니다.
    실패 시 테스트는 계속 진행됩니다.
  • ASSERT_THROW(statement, exception_type)
    위와 동일하지만, 실패 시 테스트 함수 실행을 중단합니다.
  • EXPECT_ANY_THROW(statement)
    어떤 예외라도 발생하는지 확인합니다.
  • ASSERT_ANY_THROW(statement)
    어떤 예외가 발생하는지 검사하며, 실패 시 즉시 중단합니다.
  • EXPECT_NO_THROW(statement)
    해당 코드 실행 중 예외가 발생하지 않음을 확인합니다.
  • ASSERT_NO_THROW(statement)
    예외 발생 없이 정상 실행되는지 검사하며, 실패 시 테스트를 중단합니다.

5. 기타 유용한 매크로

  • SUCCEED()
    이 매크로를 호출하면 현재 테스트가 성공적으로 실행되고 있음을 명시합니다.
    예를 들어, 조건 분기가 여러 개 있을 때, 특정 분기에서는 별도의 검증이 필요 없을 때 사용할 수 있습니다.
  • FAIL()
    해당 지점에서 테스트를 실패 처리합니다.
    주로 도달하면 안 되는 코드 경로에 진입한 경우에 사용합니다.
  • ADD_FAILURE()
    테스트 실행은 계속하지만, 실패를 기록합니다.
    여러 조건을 평가한 후, 오류가 있었음을 보고하고자 할 때 유용합니다.

6. 결론

Google Test의 매크로들은 상황에 맞게 적절히 사용하면 테스트의 가독성과 유지보수성을 크게 향상시킬 수 있습니다. EXPECT_ 시리즈는 여러 검증을 진행하고자 할 때 유용하며, ASSERT_ 시리즈는 중요한 조건에서 실패 시 추가 실행을 막아 오류의 파급을 줄이는 데 도움을 줍니다. 또한, 예외와 관련된 매크로들은 예외 처리 로직의 정확성을 확인하는 데 중요한 역할을 합니다.

이와 같이 매크로들을 상황에 맞게 활용하여 테스트 코드를 작성하면, 코드의 안정성과 신뢰성을 크게 높일 수 있습니다.

 

Google Test 공식 문서를 참고할 수 있으며 앞으로 작성하는 글을 통해 위의 매크로의 용도를 이해할 수 있도록 작성할 것입니다.

 

GoogleTest User’s Guide

GoogleTest - Google Testing and Mocking Framework

google.github.io

반응형