1# Googletest Primer 2 3## Introduction: Why googletest? 4 5*googletest* helps you write better C++ tests. 6 7googletest is a testing framework developed by the Testing Technology team with 8Google's specific requirements and constraints in mind. Whether you work on 9Linux, Windows, or a Mac, if you write C++ code, googletest can help you. And it 10supports *any* kind of tests, not just unit tests. 11 12So what makes a good test, and how does googletest fit in? We believe: 13 141. Tests should be *independent* and *repeatable*. It's a pain to debug a test 15 that succeeds or fails as a result of other tests. googletest isolates the 16 tests by running each of them on a different object. When a test fails, 17 googletest allows you to run it in isolation for quick debugging. 182. Tests should be well *organized* and reflect the structure of the tested 19 code. googletest groups related tests into test suites that can share data 20 and subroutines. This common pattern is easy to recognize and makes tests 21 easy to maintain. Such consistency is especially helpful when people switch 22 projects and start to work on a new code base. 233. Tests should be *portable* and *reusable*. Google has a lot of code that is 24 platform-neutral; its tests should also be platform-neutral. googletest 25 works on different OSes, with different compilers, with or without 26 exceptions, so googletest tests can work with a variety of configurations. 274. When tests fail, they should provide as much *information* about the problem 28 as possible. googletest doesn't stop at the first test failure. Instead, it 29 only stops the current test and continues with the next. You can also set up 30 tests that report non-fatal failures after which the current test continues. 31 Thus, you can detect and fix multiple bugs in a single run-edit-compile 32 cycle. 335. The testing framework should liberate test writers from housekeeping chores 34 and let them focus on the test *content*. googletest automatically keeps 35 track of all tests defined, and doesn't require the user to enumerate them 36 in order to run them. 376. Tests should be *fast*. With googletest, you can reuse shared resources 38 across tests and pay for the set-up/tear-down only once, without making 39 tests depend on each other. 40 41Since googletest is based on the popular xUnit architecture, you'll feel right 42at home if you've used JUnit or PyUnit before. If not, it will take you about 10 43minutes to learn the basics and get started. So let's go! 44 45## Beware of the nomenclature 46 47_Note:_ There might be some confusion arising from different definitions of the 48terms _Test_, _Test Case_ and _Test Suite_, so beware of misunderstanding these. 49 50Historically, googletest started to use the term _Test Case_ for grouping 51related tests, whereas current publications, including International Software 52Testing Qualifications Board ([ISTQB](http://www.istqb.org/)) materials and 53various textbooks on software quality, use the term 54_[Test Suite][istqb test suite]_ for this. 55 56The related term _Test_, as it is used in googletest, corresponds to the term 57_[Test Case][istqb test case]_ of ISTQB and others. 58 59The term _Test_ is commonly of broad enough sense, including ISTQB's definition 60of _Test Case_, so it's not much of a problem here. But the term _Test Case_ as 61was used in Google Test is of contradictory sense and thus confusing. 62 63googletest recently started replacing the term _Test Case_ with _Test Suite_. 64The preferred API is *TestSuite*. The older TestCase API is being slowly 65deprecated and refactored away. 66 67So please be aware of the different definitions of the terms: 68 69<!-- mdformat off(github rendering does not support multiline tables) --> 70 71Meaning | googletest Term | [ISTQB](http://www.istqb.org/) Term 72:----------------------------------------------------------------------------------- | :---------------------- | :---------------------------------- 73Exercise a particular program path with specific input values and verify the results | [TEST()](#simple-tests) | [Test Case][istqb test case] 74 75<!-- mdformat on --> 76 77[istqb test case]: http://glossary.istqb.org/en/search/test%20case 78[istqb test suite]: http://glossary.istqb.org/en/search/test%20suite 79 80## Basic Concepts 81 82When using googletest, you start by writing *assertions*, which are statements 83that check whether a condition is true. An assertion's result can be *success*, 84*nonfatal failure*, or *fatal failure*. If a fatal failure occurs, it aborts the 85current function; otherwise the program continues normally. 86 87*Tests* use assertions to verify the tested code's behavior. If a test crashes 88or has a failed assertion, then it *fails*; otherwise it *succeeds*. 89 90A *test suite* contains one or many tests. You should group your tests into test 91suites that reflect the structure of the tested code. When multiple tests in a 92test suite need to share common objects and subroutines, you can put them into a 93*test fixture* class. 94 95A *test program* can contain multiple test suites. 96 97We'll now explain how to write a test program, starting at the individual 98assertion level and building up to tests and test suites. 99 100## Assertions 101 102googletest assertions are macros that resemble function calls. You test a class 103or function by making assertions about its behavior. When an assertion fails, 104googletest prints the assertion's source file and line number location, along 105with a failure message. You may also supply a custom failure message which will 106be appended to googletest's message. 107 108The assertions come in pairs that test the same thing but have different effects 109on the current function. `ASSERT_*` versions generate fatal failures when they 110fail, and **abort the current function**. `EXPECT_*` versions generate nonfatal 111failures, which don't abort the current function. Usually `EXPECT_*` are 112preferred, as they allow more than one failure to be reported in a test. 113However, you should use `ASSERT_*` if it doesn't make sense to continue when the 114assertion in question fails. 115 116Since a failed `ASSERT_*` returns from the current function immediately, 117possibly skipping clean-up code that comes after it, it may cause a space leak. 118Depending on the nature of the leak, it may or may not be worth fixing - so keep 119this in mind if you get a heap checker error in addition to assertion errors. 120 121To provide a custom failure message, simply stream it into the macro using the 122`<<` operator or a sequence of such operators. An example: 123 124```c++ 125ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length"; 126 127for (int i = 0; i < x.size(); ++i) { 128 EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i; 129} 130``` 131 132Anything that can be streamed to an `ostream` can be streamed to an assertion 133macro--in particular, C strings and `string` objects. If a wide string 134(`wchar_t*`, `TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is 135streamed to an assertion, it will be translated to UTF-8 when printed. 136 137### Basic Assertions 138 139These assertions do basic true/false condition testing. 140 141Fatal assertion | Nonfatal assertion | Verifies 142-------------------------- | -------------------------- | -------------------- 143`ASSERT_TRUE(condition);` | `EXPECT_TRUE(condition);` | `condition` is true 144`ASSERT_FALSE(condition);` | `EXPECT_FALSE(condition);` | `condition` is false 145 146Remember, when they fail, `ASSERT_*` yields a fatal failure and returns from the 147current function, while `EXPECT_*` yields a nonfatal failure, allowing the 148function to continue running. In either case, an assertion failure means its 149containing test fails. 150 151**Availability**: Linux, Windows, Mac. 152 153### Binary Comparison 154 155This section describes assertions that compare two values. 156 157Fatal assertion | Nonfatal assertion | Verifies 158------------------------ | ------------------------ | -------------- 159`ASSERT_EQ(val1, val2);` | `EXPECT_EQ(val1, val2);` | `val1 == val2` 160`ASSERT_NE(val1, val2);` | `EXPECT_NE(val1, val2);` | `val1 != val2` 161`ASSERT_LT(val1, val2);` | `EXPECT_LT(val1, val2);` | `val1 < val2` 162`ASSERT_LE(val1, val2);` | `EXPECT_LE(val1, val2);` | `val1 <= val2` 163`ASSERT_GT(val1, val2);` | `EXPECT_GT(val1, val2);` | `val1 > val2` 164`ASSERT_GE(val1, val2);` | `EXPECT_GE(val1, val2);` | `val1 >= val2` 165 166Value arguments must be comparable by the assertion's comparison operator or 167you'll get a compiler error. We used to require the arguments to support the 168`<<` operator for streaming to an `ostream`, but this is no longer necessary. If 169`<<` is supported, it will be called to print the arguments when the assertion 170fails; otherwise googletest will attempt to print them in the best way it can. 171For more details and how to customize the printing of the arguments, see the 172[documentation](../../googlemock/docs/cook_book.md#teaching-gmock-how-to-print-your-values). 173 174These assertions can work with a user-defined type, but only if you define the 175corresponding comparison operator (e.g., `==` or `<`). Since this is discouraged 176by the Google 177[C++ Style Guide](https://google.github.io/styleguide/cppguide.html#Operator_Overloading), 178you may need to use `ASSERT_TRUE()` or `EXPECT_TRUE()` to assert the equality of 179two objects of a user-defined type. 180 181However, when possible, `ASSERT_EQ(actual, expected)` is preferred to 182`ASSERT_TRUE(actual == expected)`, since it tells you `actual` and `expected`'s 183values on failure. 184 185Arguments are always evaluated exactly once. Therefore, it's OK for the 186arguments to have side effects. However, as with any ordinary C/C++ function, 187the arguments' evaluation order is undefined (i.e., the compiler is free to 188choose any order), and your code should not depend on any particular argument 189evaluation order. 190 191`ASSERT_EQ()` does pointer equality on pointers. If used on two C strings, it 192tests if they are in the same memory location, not if they have the same value. 193Therefore, if you want to compare C strings (e.g. `const char*`) by value, use 194`ASSERT_STREQ()`, which will be described later on. In particular, to assert 195that a C string is `NULL`, use `ASSERT_STREQ(c_string, NULL)`. Consider using 196`ASSERT_EQ(c_string, nullptr)` if c++11 is supported. To compare two `string` 197objects, you should use `ASSERT_EQ`. 198 199When doing pointer comparisons use `*_EQ(ptr, nullptr)` and `*_NE(ptr, nullptr)` 200instead of `*_EQ(ptr, NULL)` and `*_NE(ptr, NULL)`. This is because `nullptr` is 201typed, while `NULL` is not. See the [FAQ](faq.md) for more details. 202 203If you're working with floating point numbers, you may want to use the floating 204point variations of some of these macros in order to avoid problems caused by 205rounding. See [Advanced googletest Topics](advanced.md) for details. 206 207Macros in this section work with both narrow and wide string objects (`string` 208and `wstring`). 209 210**Availability**: Linux, Windows, Mac. 211 212**Historical note**: Before February 2016 `*_EQ` had a convention of calling it 213as `ASSERT_EQ(expected, actual)`, so lots of existing code uses this order. Now 214`*_EQ` treats both parameters in the same way. 215 216### String Comparison 217 218The assertions in this group compare two **C strings**. If you want to compare 219two `string` objects, use `EXPECT_EQ`, `EXPECT_NE`, and etc instead. 220 221<!-- mdformat off(github rendering does not support multiline tables) --> 222 223| Fatal assertion | Nonfatal assertion | Verifies | 224| -------------------------- | ------------------------------ | -------------------------------------------------------- | 225| `ASSERT_STREQ(str1,str2);` | `EXPECT_STREQ(str1,str2);` | the two C strings have the same content | 226| `ASSERT_STRNE(str1,str2);` | `EXPECT_STRNE(str1,str2);` | the two C strings have different contents | 227| `ASSERT_STRCASEEQ(str1,str2);` | `EXPECT_STRCASEEQ(str1,str2);` | the two C strings have the same content, ignoring case | 228| `ASSERT_STRCASENE(str1,str2);` | `EXPECT_STRCASENE(str1,str2);` | the two C strings have different contents, ignoring case | 229 230<!-- mdformat on--> 231 232Note that "CASE" in an assertion name means that case is ignored. A `NULL` 233pointer and an empty string are considered *different*. 234 235`*STREQ*` and `*STRNE*` also accept wide C strings (`wchar_t*`). If a comparison 236of two wide strings fails, their values will be printed as UTF-8 narrow strings. 237 238**Availability**: Linux, Windows, Mac. 239 240**See also**: For more string comparison tricks (substring, prefix, suffix, and 241regular expression matching, for example), see [this](advanced.md) in the 242Advanced googletest Guide. 243 244## Simple Tests 245 246To create a test: 247 2481. Use the `TEST()` macro to define and name a test function. These are 249 ordinary C++ functions that don't return a value. 2502. In this function, along with any valid C++ statements you want to include, 251 use the various googletest assertions to check values. 2523. The test's result is determined by the assertions; if any assertion in the 253 test fails (either fatally or non-fatally), or if the test crashes, the 254 entire test fails. Otherwise, it succeeds. 255 256```c++ 257TEST(TestSuiteName, TestName) { 258 ... test body ... 259} 260``` 261 262`TEST()` arguments go from general to specific. The *first* argument is the name 263of the test suite, and the *second* argument is the test's name within the test 264suite. Both names must be valid C++ identifiers, and they should not contain 265any underscores (`_`). A test's *full name* consists of its containing test suite and 266its individual name. Tests from different test suites can have the same 267individual name. 268 269For example, let's take a simple integer function: 270 271```c++ 272int Factorial(int n); // Returns the factorial of n 273``` 274 275A test suite for this function might look like: 276 277```c++ 278// Tests factorial of 0. 279TEST(FactorialTest, HandlesZeroInput) { 280 EXPECT_EQ(Factorial(0), 1); 281} 282 283// Tests factorial of positive numbers. 284TEST(FactorialTest, HandlesPositiveInput) { 285 EXPECT_EQ(Factorial(1), 1); 286 EXPECT_EQ(Factorial(2), 2); 287 EXPECT_EQ(Factorial(3), 6); 288 EXPECT_EQ(Factorial(8), 40320); 289} 290``` 291 292googletest groups the test results by test suites, so logically related tests 293should be in the same test suite; in other words, the first argument to their 294`TEST()` should be the same. In the above example, we have two tests, 295`HandlesZeroInput` and `HandlesPositiveInput`, that belong to the same test 296suite `FactorialTest`. 297 298When naming your test suites and tests, you should follow the same convention as 299for 300[naming functions and classes](https://google.github.io/styleguide/cppguide.html#Function_Names). 301 302**Availability**: Linux, Windows, Mac. 303 304## Test Fixtures: Using the Same Data Configuration for Multiple Tests {#same-data-multiple-tests} 305 306If you find yourself writing two or more tests that operate on similar data, you 307can use a *test fixture*. This allows you to reuse the same configuration of 308objects for several different tests. 309 310To create a fixture: 311 3121. Derive a class from `::testing::Test` . Start its body with `protected:`, as 313 we'll want to access fixture members from sub-classes. 3142. Inside the class, declare any objects you plan to use. 3153. If necessary, write a default constructor or `SetUp()` function to prepare 316 the objects for each test. A common mistake is to spell `SetUp()` as 317 **`Setup()`** with a small `u` - Use `override` in C++11 to make sure you 318 spelled it correctly. 3194. If necessary, write a destructor or `TearDown()` function to release any 320 resources you allocated in `SetUp()` . To learn when you should use the 321 constructor/destructor and when you should use `SetUp()/TearDown()`, read 322 the [FAQ](faq.md#CtorVsSetUp). 3235. If needed, define subroutines for your tests to share. 324 325When using a fixture, use `TEST_F()` instead of `TEST()` as it allows you to 326access objects and subroutines in the test fixture: 327 328```c++ 329TEST_F(TestFixtureName, TestName) { 330 ... test body ... 331} 332``` 333 334Like `TEST()`, the first argument is the test suite name, but for `TEST_F()` 335this must be the name of the test fixture class. You've probably guessed: `_F` 336is for fixture. 337 338Unfortunately, the C++ macro system does not allow us to create a single macro 339that can handle both types of tests. Using the wrong macro causes a compiler 340error. 341 342Also, you must first define a test fixture class before using it in a 343`TEST_F()`, or you'll get the compiler error "`virtual outside class 344declaration`". 345 346For each test defined with `TEST_F()`, googletest will create a *fresh* test 347fixture at runtime, immediately initialize it via `SetUp()`, run the test, 348clean up by calling `TearDown()`, and then delete the test fixture. Note that 349different tests in the same test suite have different test fixture objects, and 350googletest always deletes a test fixture before it creates the next one. 351googletest does **not** reuse the same test fixture for multiple tests. Any 352changes one test makes to the fixture do not affect other tests. 353 354As an example, let's write tests for a FIFO queue class named `Queue`, which has 355the following interface: 356 357```c++ 358template <typename E> // E is the element type. 359class Queue { 360 public: 361 Queue(); 362 void Enqueue(const E& element); 363 E* Dequeue(); // Returns NULL if the queue is empty. 364 size_t size() const; 365 ... 366}; 367``` 368 369First, define a fixture class. By convention, you should give it the name 370`FooTest` where `Foo` is the class being tested. 371 372```c++ 373class QueueTest : public ::testing::Test { 374 protected: 375 void SetUp() override { 376 q1_.Enqueue(1); 377 q2_.Enqueue(2); 378 q2_.Enqueue(3); 379 } 380 381 // void TearDown() override {} 382 383 Queue<int> q0_; 384 Queue<int> q1_; 385 Queue<int> q2_; 386}; 387``` 388 389In this case, `TearDown()` is not needed since we don't have to clean up after 390each test, other than what's already done by the destructor. 391 392Now we'll write tests using `TEST_F()` and this fixture. 393 394```c++ 395TEST_F(QueueTest, IsEmptyInitially) { 396 EXPECT_EQ(q0_.size(), 0); 397} 398 399TEST_F(QueueTest, DequeueWorks) { 400 int* n = q0_.Dequeue(); 401 EXPECT_EQ(n, nullptr); 402 403 n = q1_.Dequeue(); 404 ASSERT_NE(n, nullptr); 405 EXPECT_EQ(*n, 1); 406 EXPECT_EQ(q1_.size(), 0); 407 delete n; 408 409 n = q2_.Dequeue(); 410 ASSERT_NE(n, nullptr); 411 EXPECT_EQ(*n, 2); 412 EXPECT_EQ(q2_.size(), 1); 413 delete n; 414} 415``` 416 417The above uses both `ASSERT_*` and `EXPECT_*` assertions. The rule of thumb is 418to use `EXPECT_*` when you want the test to continue to reveal more errors after 419the assertion failure, and use `ASSERT_*` when continuing after failure doesn't 420make sense. For example, the second assertion in the `Dequeue` test is 421`ASSERT_NE(nullptr, n)`, as we need to dereference the pointer `n` later, which 422would lead to a segfault when `n` is `NULL`. 423 424When these tests run, the following happens: 425 4261. googletest constructs a `QueueTest` object (let's call it `t1`). 4272. `t1.SetUp()` initializes `t1`. 4283. The first test (`IsEmptyInitially`) runs on `t1`. 4294. `t1.TearDown()` cleans up after the test finishes. 4305. `t1` is destructed. 4316. The above steps are repeated on another `QueueTest` object, this time 432 running the `DequeueWorks` test. 433 434**Availability**: Linux, Windows, Mac. 435 436## Invoking the Tests 437 438`TEST()` and `TEST_F()` implicitly register their tests with googletest. So, 439unlike with many other C++ testing frameworks, you don't have to re-list all 440your defined tests in order to run them. 441 442After defining your tests, you can run them with `RUN_ALL_TESTS()`, which 443returns `0` if all the tests are successful, or `1` otherwise. Note that 444`RUN_ALL_TESTS()` runs *all tests* in your link unit--they can be from 445different test suites, or even different source files. 446 447When invoked, the `RUN_ALL_TESTS()` macro: 448 449* Saves the state of all googletest flags. 450 451* Creates a test fixture object for the first test. 452 453* Initializes it via `SetUp()`. 454 455* Runs the test on the fixture object. 456 457* Cleans up the fixture via `TearDown()`. 458 459* Deletes the fixture. 460 461* Restores the state of all googletest flags. 462 463* Repeats the above steps for the next test, until all tests have run. 464 465If a fatal failure happens the subsequent steps will be skipped. 466 467> IMPORTANT: You must **not** ignore the return value of `RUN_ALL_TESTS()`, or 468> you will get a compiler error. The rationale for this design is that the 469> automated testing service determines whether a test has passed based on its 470> exit code, not on its stdout/stderr output; thus your `main()` function must 471> return the value of `RUN_ALL_TESTS()`. 472> 473> Also, you should call `RUN_ALL_TESTS()` only **once**. Calling it more than 474> once conflicts with some advanced googletest features (e.g., thread-safe 475> [death tests](advanced.md#death-tests)) and thus is not supported. 476 477**Availability**: Linux, Windows, Mac. 478 479## Writing the main() Function 480 481Most users should _not_ need to write their own `main` function and instead link 482with `gtest_main` (as opposed to with `gtest`), which defines a suitable entry 483point. See the end of this section for details. The remainder of this section 484should only apply when you need to do something custom before the tests run that 485cannot be expressed within the framework of fixtures and test suites. 486 487If you write your own `main` function, it should return the value of 488`RUN_ALL_TESTS()`. 489 490You can start from this boilerplate: 491 492```c++ 493#include "this/package/foo.h" 494 495#include "gtest/gtest.h" 496 497namespace my { 498namespace project { 499namespace { 500 501// The fixture for testing class Foo. 502class FooTest : public ::testing::Test { 503 protected: 504 // You can remove any or all of the following functions if their bodies would 505 // be empty. 506 507 FooTest() { 508 // You can do set-up work for each test here. 509 } 510 511 ~FooTest() override { 512 // You can do clean-up work that doesn't throw exceptions here. 513 } 514 515 // If the constructor and destructor are not enough for setting up 516 // and cleaning up each test, you can define the following methods: 517 518 void SetUp() override { 519 // Code here will be called immediately after the constructor (right 520 // before each test). 521 } 522 523 void TearDown() override { 524 // Code here will be called immediately after each test (right 525 // before the destructor). 526 } 527 528 // Class members declared here can be used by all tests in the test suite 529 // for Foo. 530}; 531 532// Tests that the Foo::Bar() method does Abc. 533TEST_F(FooTest, MethodBarDoesAbc) { 534 const std::string input_filepath = "this/package/testdata/myinputfile.dat"; 535 const std::string output_filepath = "this/package/testdata/myoutputfile.dat"; 536 Foo f; 537 EXPECT_EQ(f.Bar(input_filepath, output_filepath), 0); 538} 539 540// Tests that Foo does Xyz. 541TEST_F(FooTest, DoesXyz) { 542 // Exercises the Xyz feature of Foo. 543} 544 545} // namespace 546} // namespace project 547} // namespace my 548 549int main(int argc, char **argv) { 550 ::testing::InitGoogleTest(&argc, argv); 551 return RUN_ALL_TESTS(); 552} 553``` 554 555The `::testing::InitGoogleTest()` function parses the command line for 556googletest flags, and removes all recognized flags. This allows the user to 557control a test program's behavior via various flags, which we'll cover in 558the [AdvancedGuide](advanced.md). You **must** call this function before calling 559`RUN_ALL_TESTS()`, or the flags won't be properly initialized. 560 561On Windows, `InitGoogleTest()` also works with wide strings, so it can be used 562in programs compiled in `UNICODE` mode as well. 563 564But maybe you think that writing all those `main` functions is too much work? We 565agree with you completely, and that's why Google Test provides a basic 566implementation of main(). If it fits your needs, then just link your test with 567the `gtest_main` library and you are good to go. 568 569NOTE: `ParseGUnitFlags()` is deprecated in favor of `InitGoogleTest()`. 570 571## Known Limitations 572 573* Google Test is designed to be thread-safe. The implementation is thread-safe 574 on systems where the `pthreads` library is available. It is currently 575 _unsafe_ to use Google Test assertions from two threads concurrently on 576 other systems (e.g. Windows). In most tests this is not an issue as usually 577 the assertions are done in the main thread. If you want to help, you can 578 volunteer to implement the necessary synchronization primitives in 579 `gtest-port.h` for your platform. 580