CT 2025.06부터 코드 기반 테스트 기능을 통해 GTest(Google Test) 스타일의 테스트 매크로를 지원합니다.
이 페이지는 코드 기반 테스트에서 사용할 수 있는 매크로의 종류와 각각의 의미, 예제를 함께 안내합니다.
작성 중인 테스트 코드 편집기에서 Ctrl
+ Space
단축키를 누르면 자동완성 기능으로 매크로 목록을 확인할 수 있습니다.
테스트 정의 매크로
테스트 함수의 구조와 실행 단위를 정의하는 매크로입니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST(test_suite_name, test_case_name) |
테스트 스위트 하위에 테스트 케이스를 정의합니다. | CTEST(MySuite, MyTest) { ... } |
CTEST_F(test_suite_name, test_case_name) |
테스트 스위트와 동일한 이름의 사용자 정의 픽스처를 사용하는 테스트 케이스를 정의합니다. | CTEST_F(MyFixture, InitTest) { ... } |
CTEST_P(test_suite_name, test_case_name) |
파라미터화된 테스트 케이스를 선언합니다. 이후 INSTANTIATE_CTEST_SUITE_P로 인자 집합을 등록해야 합니다. 테스트 내에서 GetParam()으로 인자를 순서대로 불러옵니다. |
CTEST_P(ParamSuite, CheckParam) { ... } |
INSTANTIATE_CTEST_SUITE_P(prefix, test_suite_name, parameters) |
CTEST_P로 선언된 테스트 스위트에 parameters(벡터 형태)로 파라미터 리스트를 등록합니다. | INSTANTIATE_CTEST_SUITE_P(Default, ParamSuite, ::ctest::Values(1, 2)); |
예제:
// 1. CTEST: 단순 테스트 케이스 CTEST(Math, Addition) { CTEST_ASSERT_EQ(5, Add(2, 3)); } // 2. CTEST_F: 공통 fixture를 사용하는 테스트 class CalculatorFixture : public ::ctest::Fixture { public: void SetUpTest() override { calculator.reset(); initial_value = 100; } void TearDownTest() override { // 정리 작업 수행 } protected: Calculator calculator; int initial_value; }; CTEST_F(CalculatorFixture, WithInitialValue) { calculator.setValue(initial_value); CTEST_ASSERT_EQ(105, calculator.add(5)); } // 3. CTEST_P: 파라미터화 테스트 class EvenNumberTest : public ::ctest::TestWithParam<int> { public: void SetUpTest() override { // 각 테스트 실행 전 초기화 } void TearDownTest() override { // 각 테스트 실행 후 정리 } }; CTEST_P(EvenNumberTest, CheckIfEven) { int value = GetParam(); CTEST_EXPECT(value % 2 == 0); } INSTANTIATE_CTEST_SUITE_P(EvenNumbers, EvenNumberTest, ::ctest::Values(0, 2, 4, 6, 8));
기본 조건 검사 매크로
단일 조건의 참/거짓 여부를 확인합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST_EXPECT(condition) |
조건이 true이면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT(x > 0); |
CTEST_ASSERT(condition) |
조건이 true이면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT(ptr != nullptr); |
값 비교 매크로
정수 또는 기타 일반 값의 비교 결과를 확인합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST_EXPECT_EQ(a, b) |
두 값이 같으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_EQ(5, Add(2,3)); |
CTEST_ASSERT_EQ(a, b) |
두 값이 같으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_EQ(42, GetValue()); |
CTEST_EXPECT_NE(a, b) |
두 값이 다르면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_NE(status, -1); |
CTEST_ASSERT_NE(a, b) |
두 값이 다르면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_NE(pointer, nullptr); |
CTEST_EXPECT_LT(a, b) |
a가 b보다 작으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_LT(index, array_size); |
CTEST_ASSERT_LT(a, b) |
a가 b보다 작으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_LT(position, buffer.size()); |
CTEST_EXPECT_LE(a, b) |
a가 b보다 작거나 같으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_LE(current_size, max_size); |
CTEST_ASSERT_LE(a, b) |
a가 b보다 작거나 같으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_LE(used_memory, max_memory); |
CTEST_EXPECT_GT(a, b) |
a가 b보다 크면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_GT(score, 70); |
CTEST_ASSERT_GT(a, b) |
a가 b보다 크면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_GT(new_count, old_count); |
CTEST_EXPECT_GE(a, b) |
a가 b보다 크거나 같으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_GE(result, minimum); |
CTEST_ASSERT_GE(a, b) |
a가 b보다 크거나 같으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_GE(available_space, required_space); |
문자열 비교 매크로
문자열의 동일 여부 또는 대소문자 무시 여부를 검사합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST_EXPECT_STR_EQ(a, b) |
두 문자열이 정확히 같으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_STR_EQ(result, "OK"); |
CTEST_ASSERT_STR_EQ(a, b) |
두 문자열이 정확히 같으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_STR_EQ(output.c_str(), "PASS"); |
CTEST_EXPECT_STR_NE(a, b) |
두 문자열이 다르면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_STR_NE(input, "fail"); |
CTEST_ASSERT_STR_NE(a, b) |
두 문자열이 다르면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_STR_NE(msg.c_str(), "ERROR"); |
CTEST_EXPECT_STR_IGNORE_CASE_EQ(a, b) |
대소문자를 구분하지 않고 두 문자열이 같으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_STR_IGNORE_CASE_EQ(cmd, "start"); |
CTEST_ASSERT_STR_IGNORE_CASE_EQ(a, b) |
대소문자를 구분하지 않고 두 문자열이 같으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_STR_IGNORE_CASE_EQ(user_input, "YES"); |
CTEST_EXPECT_STR_IGNORE_CASE_NE(a, b) |
대소문자를 구분하지 않고 두 문자열이 다르면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_STR_IGNORE_CASE_NE(command, "exit"); |
CTEST_ASSERT_STR_IGNORE_CASE_NE(a, b) |
대소문자를 구분하지 않고 두 문자열이 다르면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_STR_IGNORE_CASE_NE(response, "abort"); |
실수 비교 매크로
부동소수점 값의 근사 비교를 수행합니다. 부동소수점은 정확한 값 비교가 어려우므로 허용 오차 범위 내에서 비교합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST_EXPECT_FLOAT_EQ(a, b) |
두 float 값의 차이가 1e-5f 이하면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_FLOAT_EQ(calc, 3.14159f); |
CTEST_ASSERT_FLOAT_EQ(a, b) |
두 float 값의 차이가 1e-5f 이하면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_FLOAT_EQ(gravity, 9.81f); |
CTEST_EXPECT_DOUBLE_EQ(a, b) |
두 double 값의 차이가 1e-12 이하면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_DOUBLE_EQ(pi, 3.14159265359); |
CTEST_ASSERT_DOUBLE_EQ(a, b) |
두 double 값의 차이가 1e-12 이하면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_DOUBLE_EQ(result, expected); |
CTEST_EXPECT_NEAR(a, b, tol) |
두 값의 차이가 지정한 허용 오차(tol) 이하면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_NEAR(measurement, standard, 0.001); |
CTEST_ASSERT_NEAR(a, b, tol) |
두 값의 차이가 지정한 허용 오차(tol) 이하면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_NEAR(output, 1.0, 0.0001); |
예외 검사 매크로
코드 실행 중 예외 발생 여부를 확인합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST_EXPECT_THROW(stmt, ex_type) |
지정된 문장이 특정 타입의 예외를 발생시키면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_THROW(func(), std::runtime_error); |
CTEST_ASSERT_THROW(stmt, ex_type) |
지정된 문장이 특정 타입의 예외를 발생시키면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_THROW(open(), std::logic_error); |
CTEST_EXPECT_NO_THROW(stmt) |
지정된 문장이 예외를 발생시키지 않으면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_NO_THROW(safe_call()); |
CTEST_ASSERT_NO_THROW(stmt) |
지정된 문장이 예외를 발생시키지 않으면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_NO_THROW(do_work()); |
CTEST_EXPECT_ANY_THROW(stmt) |
지정된 문장이 어떤 종류든 예외를 발생시키면 테스트 통과, 실패해도 테스트를 계속 진행합니다. | CTEST_EXPECT_ANY_THROW(dangerous()); |
CTEST_ASSERT_ANY_THROW(stmt) |
지정된 문장이 어떤 종류든 예외를 발생시키면 테스트 통과, 실패하면 테스트를 중단합니다. | CTEST_ASSERT_ANY_THROW(unstable()); |
로그 출력 매크로
테스트 실행 중 디버깅이나 정보 확인을 위한 로그 메시지를 출력합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CTEST_LOG(msg) |
사용자 로그를 출력합니다. | CTEST_LOG("테스트 시작"); |
CTEST_LOG_FORMAT(fmt, ...) |
지정된 형식으로 사용자 로그를 출력합니다. | CTEST_LOG_FORMAT("count=%d, result=%s", count, "PASS"); |
Mock 관련 매크로
테스트용 가짜(Mock) 객체를 만들어 의존성을 제어하고 호출 결과를 검증할 때 사용합니다.
매크로 형태 | 설명 | 예제 |
---|---|---|
CMOCK_METHOD(returnType, methodName, args, specifiers) |
목 객체(Mock)에 methodName이라는 이름의 메소드를 정의합니다. 반환형이 void가 아닌 경우 SetReturn_methodName을 통해 반환값을 설정할 수 있습니다. | CMOCK_METHOD(int, Add, (int a, int b), const override); |
예제:
class MockFoo : public Foo { CMOCK_METHOD(int, Add, (int a, int b), const override); }; CTEST(MockTest, AddCalled) { MockFoo mock; mock.SetReturn_Add(42); CTEST_ASSERT_EQ(42, mock.Add(2, 3)); }
Need more help with this?
Don’t hesitate to contact us here.