Why do we need yet another C++ test framework?
Good question. For C++ there are quite a number of established frameworks, including (but not limited to), Google Test, Boost.Test, CppUnit, Cute, many, many more.
So what does Catch bring to the party that differentiates it from these? Apart from a Catchy name, of course.
- Quick and Really easy to get started. Just download catch.hpp,
#include it and you're away.
- No external dependencies. As long as you can compile C++11 and have a 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 Windows and Mac.
- 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.
- Catch can test itself.
- Alternative assertion macro(s) report failures but don't abort the test case
- Floating point tolerance comparisons are built in using an expressive Approx() syntax.
- Internal and friendly macros are isolated so name clashes can be managed
Who else is using Catch?
See the list of open source projects using Catch.
See the tutorial to get more of a taste of using Catch in practice