Catch2 testing framework
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Vertexwahn 9131736630 Bazel support: Update skylib 2 days ago
.conan Add support for Components 3 years ago
.github Cleanup the Windows GHA builds 5 months ago
CMake Add new config option: STATIC_ANALYSIS_SUPPORT 2 weeks ago
data/artwork Use logo with bit of white background in README 7 months ago
docs Test & document SKIP in generator constructor 1 week ago
examples Fix spelling 1 month ago
extras Catch.cmake: Add new DISCOVERY_MODE option to catch_discover_tests 2 months ago
fuzzing add fuzzer for columns 3 years ago
src Experimental static analysis support in TEST_CASE and SECTION 2 weeks ago
tests Test & document SKIP in generator constructor 1 week ago
third_party fixing UB 3 years ago
tools Fix spelling 1 month ago
.bazelrc Make Bazel work with CATCH_CONFIG_SHARED_LIBRARY 9 months ago
.clang-format Slightly better clang-format 5 months ago
.gitattributes Update gitattributes 5 years ago
.gitignore Add support for building with Meson (#2530) 8 months ago
BUILD.bazel Add new config option: STATIC_ANALYSIS_SUPPORT 2 weeks ago
CMakeLists.txt Fixed extras installation and shard impl location 3 months ago
CMakePresets.json Add basic CMake presets 1 year ago Create 6 years ago
Doxyfile Avoid usage of master when possible 6 months ago
LICENSE.txt Renamed licence file, license should now be detected by github 6 years ago Mention that the benchmarks are not run by default next to example 6 months ago Add 2 years ago
WORKSPACE.bazel Bazel support: Update skylib 2 days ago
appveyor.yml Prune Appveyor builds 6 months ago
codecov.yml Sweep out two leftover references to master 3 years ago Add lib/cmake/Catch2 to conan builddirs in package recipe so extras/*.cmake files are packaged 1 year ago
mdsnippets.json Add infrastructure for embedding code samples in docs. 3 years ago Add option to disable building unit tests in Meson build file. 2 weeks ago
meson_options.txt Add option to disable building unit tests in Meson build file. 2 weeks ago

Catch2 logo

Github Releases Linux build status Linux build status MacOS build status Build Status Code Coverage Try online Join the chat in Discord:

What is Catch2?

Catch2 is mainly a unit testing framework for C++, but it also provides basic micro-benchmarking features, and simple BDD macros.

Catch2's main advantage is that using it is both simple and natural. Test names do not have to be valid identifiers, assertions look like normal C++ boolean expressions, and sections provide a nice and local way to share set-up and tear-down code in tests.

Example unit test

#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 );

Example microbenchmark

#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);

Note that benchmarks are not run by default, so you need to run it explicitly with the [!benchmark] tag.

Catch2 v3 has been released!

You are on the devel branch, where the v3 version is being developed. v3 brings a bunch of significant changes, the big one being that Catch2 is no longer a single-header library. Catch2 now behaves as a normal library, with multiple headers and separately compiled implementation.

The documentation is slowly being updated to take these changes into account, but this work is currently still ongoing.

For migrating from the v2 releases to v3, you should look at our documentation. It provides a simple guidelines on getting started, and collects most common migration problems.

For the previous major version of Catch2 look into the v2.x branch here on GitHub.

How to use it

This documentation comprises these three parts: