Google Test의 주요 매크로
Google Test는 테스트를 작성할 때 다양한 매크로를 제공합니다. 주요 매크로는 다음과 같습니다. 세부적인 코드작성 방법을 익히기위해 각 매크로 종류가 어떤 것들이 있는지 먼저 매크로 이름과 용도를 가볍게 알아둘 필요가 있습니다.
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
'TDD 테스트주도개발 > TDD for C++' 카테고리의 다른 글
[googletest문법4]파라메터 이용 TEST_P() 사용법 (1) | 2025.03.13 |
---|---|
[googletest문법3]테스트 픽스처 TEST_F() 사용법 (0) | 2025.03.10 |
[Googletest문법2]단일테스트 TEST() 작성방법 (0) | 2025.03.08 |
[TDD C++(2)]VS Code+Gtest 환경 설정 (0) | 2025.03.04 |
[TDD C++(1)]TDD 도구 설치! GoogleTest란? 또 구글! (1) | 2025.03.02 |