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
264case. 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
481Write your own main() function, which should return the value of
482`RUN_ALL_TESTS()`.
483
484You can start from this boilerplate:
485
486```c++
487#include "this/package/foo.h"
488#include "gtest/gtest.h"
489
490namespace {
491
492// The fixture for testing class Foo.
493class FooTest : public ::testing::Test {
494 protected:
495  // You can remove any or all of the following functions if its body
496  // is empty.
497
498  FooTest() {
499     // You can do set-up work for each test here.
500  }
501
502  ~FooTest() override {
503     // You can do clean-up work that doesn't throw exceptions here.
504  }
505
506  // If the constructor and destructor are not enough for setting up
507  // and cleaning up each test, you can define the following methods:
508
509  void SetUp() override {
510     // Code here will be called immediately after the constructor (right
511     // before each test).
512  }
513
514  void TearDown() override {
515     // Code here will be called immediately after each test (right
516     // before the destructor).
517  }
518
519  // Objects declared here can be used by all tests in the test suite for Foo.
520};
521
522// Tests that the Foo::Bar() method does Abc.
523TEST_F(FooTest, MethodBarDoesAbc) {
524  const std::string input_filepath = "this/package/testdata/myinputfile.dat";
525  const std::string output_filepath = "this/package/testdata/myoutputfile.dat";
526  Foo f;
527  EXPECT_EQ(f.Bar(input_filepath, output_filepath), 0);
528}
529
530// Tests that Foo does Xyz.
531TEST_F(FooTest, DoesXyz) {
532  // Exercises the Xyz feature of Foo.
533}
534
535}  // namespace
536
537int main(int argc, char **argv) {
538  ::testing::InitGoogleTest(&argc, argv);
539  return RUN_ALL_TESTS();
540}
541```
542
543The `::testing::InitGoogleTest()` function parses the command line for
544googletest flags, and removes all recognized flags. This allows the user to
545control a test program's behavior via various flags, which we'll cover in
546the [AdvancedGuide](advanced.md). You **must** call this function before calling
547`RUN_ALL_TESTS()`, or the flags won't be properly initialized.
548
549On Windows, `InitGoogleTest()` also works with wide strings, so it can be used
550in programs compiled in `UNICODE` mode as well.
551
552But maybe you think that writing all those main() functions is too much work? We
553agree with you completely, and that's why Google Test provides a basic
554implementation of main(). If it fits your needs, then just link your test with
555gtest\_main library and you are good to go.
556
557NOTE: `ParseGUnitFlags()` is deprecated in favor of `InitGoogleTest()`.
558
559## Known Limitations
560
561*   Google Test is designed to be thread-safe. The implementation is thread-safe
562    on systems where the `pthreads` library is available. It is currently
563    _unsafe_ to use Google Test assertions from two threads concurrently on
564    other systems (e.g. Windows). In most tests this is not an issue as usually
565    the assertions are done in the main thread. If you want to help, you can
566    volunteer to implement the necessary synchronization primitives in
567    `gtest-port.h` for your platform.
568