why-catch.md
1 <a id="top"></a> 2 # Why do we need yet another C++ test framework? 3 4 Good question. For C++ there are quite a number of established frameworks, 5 including (but not limited to), 6 [Google Test](http://code.google.com/p/googletest/), 7 [Boost.Test](http://www.boost.org/doc/libs/1_49_0/libs/test/doc/html/index.html), 8 [CppUnit](http://sourceforge.net/apps/mediawiki/cppunit/index.php?title=Main_Page), 9 [Cute](http://www.cute-test.com), and 10 [many, many more](http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B). 11 12 So what does Catch2 bring to the party that differentiates it from these? Apart from the catchy name, of course. 13 14 15 ## Key Features 16 17 * Quick and easy to get started. Just download two files, add them into your project and you're away. 18 * No external dependencies. As long as you can compile C++14 and have the C++ standard library available. 19 * Write test cases as, self-registering, functions (or methods, if you prefer). 20 * Divide test cases into sections, each of which is run in isolation (eliminates the need for fixtures). 21 * Use BDD-style Given-When-Then sections as well as traditional unit test cases. 22 * 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. 23 * Tests are named using free-form strings - no more couching names in legal identifiers. 24 25 26 ## Other core features 27 28 * Tests can be tagged for easily running ad-hoc groups of tests. 29 * Failures can (optionally) break into the debugger on common platforms. 30 * Output is through modular reporter objects. Basic textual and XML reporters are included. Custom reporters can easily be added. 31 * JUnit xml output is supported for integration with third-party tools, such as CI servers. 32 * A default main() function is provided, but you can supply your own for complete control (e.g. integration into your own test runner GUI). 33 * A command line parser is provided and can still be used if you choose to provide your own main() function. 34 * Alternative assertion macro(s) report failures but don't abort the test case 35 * Good set of facilities for floating point comparisons (`Catch::Approx` and full set of matchers) 36 * Internal and friendly macros are isolated so name clashes can be managed 37 * Data generators (data driven test support) 38 * Hamcrest-style Matchers for testing complex properties 39 * Microbenchmarking support 40 41 42 ## Who else is using Catch2? 43 44 A whole lot of people. According to [the 2022 JetBrains C++ ecosystem survey](https://www.jetbrains.com/lp/devecosystem-2022/cpp/#Which-unit-testing-frameworks-do-you-regularly-use), 45 about 12% of C++ programmers use Catch2 for unit testing, making it the 46 second most popular unit testing framework. 47 48 You can also take a look at the (incomplete) list of [open source projects](opensource-users.md#top) 49 or the (very incomplete) list of [commercial users of Catch2](commercial-users.md#top) 50 for some idea on who else also uses Catch2. 51 52 --- 53 54 See the [tutorial](tutorial.md#top) to get more of a taste of using 55 Catch2 in practice. 56 57 --- 58 59 [Home](Readme.md#top)