Comparison of C++ unit test frameworks
A new player is Google Test (also known as Google C++ Testing Framework) which is pretty nice though.
#include <gtest/gtest.h>
TEST(MyTestSuitName, MyTestCaseName) {
int actual = 1;
EXPECT_GT(actual, 0);
EXPECT_EQ(1, actual) << "Should be equal to one";
}
Main features:
- Portable
- Fatal and non-fatal assertions
- Easy assertions informative messages:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
- Google Test automatically detects your tests and doesn't require you to enumerate them in order to run them
- Make it easy to extend your assertion vocabulary
- Death tests (see advanced guide)
SCOPED_TRACE
for subroutine loops- You can decide which tests to run
- XML test report generation
- Fixtures / Mock / Templates...
I've just pushed my own framework, Catch2, out there. It's still under development but I believe it already surpasses most other frameworks. Different people have different criteria but I've tried to cover most ground without too many trade-offs. Take a look at my linked blog entry for a taster. My top five features are:
- Header only
- Auto registration of function and method based tests
- Decomposes standard C++ expressions into LHS and RHS (so you don't need a whole family of assert macros).
- Support for nested sections within a function based fixture
- Name tests using natural language - function/method names are generated
It also has Objective-C bindings. The project is hosted on Github
See this question for some discussion.
They recommend the articles: Exploring the C++ Unit Testing Framework Jungle, By Noel Llopis. And the more recent: C++ Test Unit Frameworks
I have not found an article that compares googletest to the other frameworks yet.