Why do we need yet another C++ test framework?
So what does Catch2 bring to the party that differentiates it from these? Apart from the catchy name, of course.
- Quick and easy to get started. Just download two files, add them into your project and you're away.
- No external dependencies. As long as you can compile C++14 and have the C++ standard library available.
- Write test cases as, self-registering, functions (or methods, if you prefer).
- Divide test cases into sections, each of which is run in isolation (eliminates the need for fixtures).
- Use BDD-style Given-When-Then sections as well as traditional unit test cases.
- Only one core assertion macro for comparisons. Standard C/C++ operators are used for the comparison - yet the full expression is decomposed and lhs and rhs values are logged.
- Tests are named using free-form strings - no more couching names in legal identifiers.
Other core features
- Tests can be tagged for easily running ad-hoc groups of tests.
- Failures can (optionally) break into the debugger on common platforms.
- Output is through modular reporter objects. Basic textual and XML reporters are included. Custom reporters can easily be added.
- JUnit xml output is supported for integration with third-party tools, such as CI servers.
- A default main() function is provided, but you can supply your own for complete control (e.g. integration into your own test runner GUI).
- A command line parser is provided and can still be used if you choose to provided your own main() function.
- Alternative assertion macro(s) report failures but don't abort the test case
- Good set of facilities for floating point comparisons (
Catch::Approxand full set of matchers)
- Internal and friendly macros are isolated so name clashes can be managed
- Data generators (data driven test support)
- Hamcrest-style Matchers for testing complex properties
- Microbenchmarking support
Who else is using Catch2?
A whole lot of people. According to the 2021 JetBrains C++ ecosystem survey, about 11% of C++ programmers use Catch2 for unit testing, making it the second most popular unit testing framework.
See the tutorial to get more of a taste of using Catch2 in practice.