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.

Thanks for your feedback.