반응형

Catch2 : 쉽고 강력한 C++ 단위 테스트와 벤치마킹

Catch2는 C++ 언어를 위한 단위 테스트 프레임워크로, 간단한 마이크로 벤치마킹 기능과 BDD(행위 주도 개발) 매크로를 제공합니다. 이 프레임워크의 주요 장점은 사용이 직관적이고 자연스럽다는 점입니다. 테스트 이름은 유효한 식별자일 필요가 없으며, 어설션은 일반적인 C++ 부울 표현식을 사용합니다. 또한, 섹션 기능을 통해 테스트 내에서 설정 및 해제 코드를 지역적으로 공유할 수 있습니다.

- 단위 테스트 예시:

cpp

#include <catch2/catch_test_macros.hpp>
#include <cstdint>

uint32_t factorial(uint32_t number) {
    return number <= 1 ? number : factorial(number - 1) * number;
}

TEST_CASE("Factorials are computed", "[factorial]") {
    REQUIRE(factorial(1) == 1);
    REQUIRE(factorial(2) == 2);
    REQUIRE(factorial(3) == 6);
    REQUIRE(factorial(10) == 3'628'800);
}

마이크로 벤치마크 예시:

cpp

#include <catch2/catch_test_macros.hpp>
#include <catch2/benchmark/catch_benchmark.hpp>
#include <cstdint>

uint64_t fibonacci(uint64_t number) {
    return number < 2 ? number : fibonacci(number - 1) + fibonacci(number - 2);
}

TEST_CASE("Benchmark Fibonacci", "[!benchmark]") {
    REQUIRE(fibonacci(5) == 5);
    REQUIRE(fibonacci(20) == 6'765);
    BENCHMARK("fibonacci 20") {
        return fibonacci(20);
    };

    REQUIRE(fibonacci(25) == 75'025);
    BENCHMARK("fibonacci 25") {
        return fibonacci(25);
    };
}
  • [!benchmark] 태그가 붙은 벤치마크는 기본적으로 실행되지 않으므로, 명시적으로 실행해야 합니다.

추가 내용

최근 Catch2의 버전 3이 출시되었습니다. 이 버전에서는 여러 가지 중요한 변경 사항이 포함되어 있으며, 가장 큰 변화는 Catch2가 더 이상 단일 헤더 라이브러리가 아니라는 점입니다. 이제 여러 개의 헤더와 별도로 컴파일된 구현을 갖춘 일반적인 라이브러리로 동작합니다. 이러한 변경 사항에 맞춰 문서도 업데이트되고 있으며, 현재도 개정 작업이 진행 중입니다. 버전 2에서 버전 3로 마이그레이션하려면 공식 문서를 참조하여 간단한 시작 지침과 일반적인 마이그레이션 방법을 확인할 수 있습니다.

이슈나 버그는 GitHub의 이슈 추적기 를 통해 제기할 수 있으며, 토론이나 질문은 Discord 채널 에서 진행할 수 있습니다.

728x90
반응형

+ Recent posts