Imported Upstream version 1.14.0
[platform/upstream/gtest.git] / docs / advanced.md
1 # Advanced GoogleTest Topics
2
3 ## Introduction
4
5 Now that you have read the [GoogleTest Primer](primer.md) and learned how to
6 write tests using GoogleTest, it's time to learn some new tricks. This document
7 will show you more assertions as well as how to construct complex failure
8 messages, propagate fatal failures, reuse and speed up your test fixtures, and
9 use various flags with your tests.
10
11 ## More Assertions
12
13 This section covers some less frequently used, but still significant,
14 assertions.
15
16 ### Explicit Success and Failure
17
18 See [Explicit Success and Failure](reference/assertions.md#success-failure) in
19 the Assertions Reference.
20
21 ### Exception Assertions
22
23 See [Exception Assertions](reference/assertions.md#exceptions) in the Assertions
24 Reference.
25
26 ### Predicate Assertions for Better Error Messages
27
28 Even though GoogleTest has a rich set of assertions, they can never be complete,
29 as it's impossible (nor a good idea) to anticipate all scenarios a user might
30 run into. Therefore, sometimes a user has to use `EXPECT_TRUE()` to check a
31 complex expression, for lack of a better macro. This has the problem of not
32 showing you the values of the parts of the expression, making it hard to
33 understand what went wrong. As a workaround, some users choose to construct the
34 failure message by themselves, streaming it into `EXPECT_TRUE()`. However, this
35 is awkward especially when the expression has side-effects or is expensive to
36 evaluate.
37
38 GoogleTest gives you three different options to solve this problem:
39
40 #### Using an Existing Boolean Function
41
42 If you already have a function or functor that returns `bool` (or a type that
43 can be implicitly converted to `bool`), you can use it in a *predicate
44 assertion* to get the function arguments printed for free. See
45 [`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the Assertions
46 Reference for details.
47
48 #### Using a Function That Returns an AssertionResult
49
50 While `EXPECT_PRED*()` and friends are handy for a quick job, the syntax is not
51 satisfactory: you have to use different macros for different arities, and it
52 feels more like Lisp than C++. The `::testing::AssertionResult` class solves
53 this problem.
54
55 An `AssertionResult` object represents the result of an assertion (whether it's
56 a success or a failure, and an associated message). You can create an
57 `AssertionResult` using one of these factory functions:
58
59 ```c++
60 namespace testing {
61
62 // Returns an AssertionResult object to indicate that an assertion has
63 // succeeded.
64 AssertionResult AssertionSuccess();
65
66 // Returns an AssertionResult object to indicate that an assertion has
67 // failed.
68 AssertionResult AssertionFailure();
69
70 }
71 ```
72
73 You can then use the `<<` operator to stream messages to the `AssertionResult`
74 object.
75
76 To provide more readable messages in Boolean assertions (e.g. `EXPECT_TRUE()`),
77 write a predicate function that returns `AssertionResult` instead of `bool`. For
78 example, if you define `IsEven()` as:
79
80 ```c++
81 testing::AssertionResult IsEven(int n) {
82   if ((n % 2) == 0)
83     return testing::AssertionSuccess();
84   else
85     return testing::AssertionFailure() << n << " is odd";
86 }
87 ```
88
89 instead of:
90
91 ```c++
92 bool IsEven(int n) {
93   return (n % 2) == 0;
94 }
95 ```
96
97 the failed assertion `EXPECT_TRUE(IsEven(Fib(4)))` will print:
98
99 ```none
100 Value of: IsEven(Fib(4))
101   Actual: false (3 is odd)
102 Expected: true
103 ```
104
105 instead of a more opaque
106
107 ```none
108 Value of: IsEven(Fib(4))
109   Actual: false
110 Expected: true
111 ```
112
113 If you want informative messages in `EXPECT_FALSE` and `ASSERT_FALSE` as well
114 (one third of Boolean assertions in the Google code base are negative ones), and
115 are fine with making the predicate slower in the success case, you can supply a
116 success message:
117
118 ```c++
119 testing::AssertionResult IsEven(int n) {
120   if ((n % 2) == 0)
121     return testing::AssertionSuccess() << n << " is even";
122   else
123     return testing::AssertionFailure() << n << " is odd";
124 }
125 ```
126
127 Then the statement `EXPECT_FALSE(IsEven(Fib(6)))` will print
128
129 ```none
130   Value of: IsEven(Fib(6))
131      Actual: true (8 is even)
132   Expected: false
133 ```
134
135 #### Using a Predicate-Formatter
136
137 If you find the default message generated by
138 [`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) and
139 [`EXPECT_TRUE`](reference/assertions.md#EXPECT_TRUE) unsatisfactory, or some
140 arguments to your predicate do not support streaming to `ostream`, you can
141 instead use *predicate-formatter assertions* to *fully* customize how the
142 message is formatted. See
143 [`EXPECT_PRED_FORMAT*`](reference/assertions.md#EXPECT_PRED_FORMAT) in the
144 Assertions Reference for details.
145
146 ### Floating-Point Comparison
147
148 See [Floating-Point Comparison](reference/assertions.md#floating-point) in the
149 Assertions Reference.
150
151 #### Floating-Point Predicate-Format Functions
152
153 Some floating-point operations are useful, but not that often used. In order to
154 avoid an explosion of new macros, we provide them as predicate-format functions
155 that can be used in the predicate assertion macro
156 [`EXPECT_PRED_FORMAT2`](reference/assertions.md#EXPECT_PRED_FORMAT), for
157 example:
158
159 ```c++
160 using ::testing::FloatLE;
161 using ::testing::DoubleLE;
162 ...
163 EXPECT_PRED_FORMAT2(FloatLE, val1, val2);
164 EXPECT_PRED_FORMAT2(DoubleLE, val1, val2);
165 ```
166
167 The above code verifies that `val1` is less than, or approximately equal to,
168 `val2`.
169
170 ### Asserting Using gMock Matchers
171
172 See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions
173 Reference.
174
175 ### More String Assertions
176
177 (Please read the [previous](#asserting-using-gmock-matchers) section first if
178 you haven't.)
179
180 You can use the gMock [string matchers](reference/matchers.md#string-matchers)
181 with [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) to do more string
182 comparison tricks (sub-string, prefix, suffix, regular expression, and etc). For
183 example,
184
185 ```c++
186 using ::testing::HasSubstr;
187 using ::testing::MatchesRegex;
188 ...
189   ASSERT_THAT(foo_string, HasSubstr("needle"));
190   EXPECT_THAT(bar_string, MatchesRegex("\\w*\\d+"));
191 ```
192
193 ### Windows HRESULT assertions
194
195 See [Windows HRESULT Assertions](reference/assertions.md#HRESULT) in the
196 Assertions Reference.
197
198 ### Type Assertions
199
200 You can call the function
201
202 ```c++
203 ::testing::StaticAssertTypeEq<T1, T2>();
204 ```
205
206 to assert that types `T1` and `T2` are the same. The function does nothing if
207 the assertion is satisfied. If the types are different, the function call will
208 fail to compile, the compiler error message will say that `T1 and T2 are not the
209 same type` and most likely (depending on the compiler) show you the actual
210 values of `T1` and `T2`. This is mainly useful inside template code.
211
212 **Caveat**: When used inside a member function of a class template or a function
213 template, `StaticAssertTypeEq<T1, T2>()` is effective only if the function is
214 instantiated. For example, given:
215
216 ```c++
217 template <typename T> class Foo {
218  public:
219   void Bar() { testing::StaticAssertTypeEq<int, T>(); }
220 };
221 ```
222
223 the code:
224
225 ```c++
226 void Test1() { Foo<bool> foo; }
227 ```
228
229 will not generate a compiler error, as `Foo<bool>::Bar()` is never actually
230 instantiated. Instead, you need:
231
232 ```c++
233 void Test2() { Foo<bool> foo; foo.Bar(); }
234 ```
235
236 to cause a compiler error.
237
238 ### Assertion Placement
239
240 You can use assertions in any C++ function. In particular, it doesn't have to be
241 a method of the test fixture class. The one constraint is that assertions that
242 generate a fatal failure (`FAIL*` and `ASSERT_*`) can only be used in
243 void-returning functions. This is a consequence of Google's not using
244 exceptions. By placing it in a non-void function you'll get a confusing compile
245 error like `"error: void value not ignored as it ought to be"` or `"cannot
246 initialize return object of type 'bool' with an rvalue of type 'void'"` or
247 `"error: no viable conversion from 'void' to 'string'"`.
248
249 If you need to use fatal assertions in a function that returns non-void, one
250 option is to make the function return the value in an out parameter instead. For
251 example, you can rewrite `T2 Foo(T1 x)` to `void Foo(T1 x, T2* result)`. You
252 need to make sure that `*result` contains some sensible value even when the
253 function returns prematurely. As the function now returns `void`, you can use
254 any assertion inside of it.
255
256 If changing the function's type is not an option, you should just use assertions
257 that generate non-fatal failures, such as `ADD_FAILURE*` and `EXPECT_*`.
258
259 {: .callout .note}
260 NOTE: Constructors and destructors are not considered void-returning functions,
261 according to the C++ language specification, and so you may not use fatal
262 assertions in them; you'll get a compilation error if you try. Instead, either
263 call `abort` and crash the entire test executable, or put the fatal assertion in
264 a `SetUp`/`TearDown` function; see
265 [constructor/destructor vs. `SetUp`/`TearDown`](faq.md#CtorVsSetUp)
266
267 {: .callout .warning}
268 WARNING: A fatal assertion in a helper function (private void-returning method)
269 called from a constructor or destructor does not terminate the current test, as
270 your intuition might suggest: it merely returns from the constructor or
271 destructor early, possibly leaving your object in a partially-constructed or
272 partially-destructed state! You almost certainly want to `abort` or use
273 `SetUp`/`TearDown` instead.
274
275 ## Skipping test execution
276
277 Related to the assertions `SUCCEED()` and `FAIL()`, you can prevent further test
278 execution at runtime with the `GTEST_SKIP()` macro. This is useful when you need
279 to check for preconditions of the system under test during runtime and skip
280 tests in a meaningful way.
281
282 `GTEST_SKIP()` can be used in individual test cases or in the `SetUp()` methods
283 of classes derived from either `::testing::Environment` or `::testing::Test`.
284 For example:
285
286 ```c++
287 TEST(SkipTest, DoesSkip) {
288   GTEST_SKIP() << "Skipping single test";
289   EXPECT_EQ(0, 1);  // Won't fail; it won't be executed
290 }
291
292 class SkipFixture : public ::testing::Test {
293  protected:
294   void SetUp() override {
295     GTEST_SKIP() << "Skipping all tests for this fixture";
296   }
297 };
298
299 // Tests for SkipFixture won't be executed.
300 TEST_F(SkipFixture, SkipsOneTest) {
301   EXPECT_EQ(5, 7);  // Won't fail
302 }
303 ```
304
305 As with assertion macros, you can stream a custom message into `GTEST_SKIP()`.
306
307 ## Teaching GoogleTest How to Print Your Values
308
309 When a test assertion such as `EXPECT_EQ` fails, GoogleTest prints the argument
310 values to help you debug. It does this using a user-extensible value printer.
311
312 This printer knows how to print built-in C++ types, native arrays, STL
313 containers, and any type that supports the `<<` operator. For other types, it
314 prints the raw bytes in the value and hopes that you the user can figure it out.
315
316 As mentioned earlier, the printer is *extensible*. That means you can teach it
317 to do a better job at printing your particular type than to dump the bytes. To
318 do that, define an `AbslStringify()` overload as a `friend` function template
319 for your type:
320
321 ```cpp
322 namespace foo {
323
324 class Point {  // We want GoogleTest to be able to print instances of this.
325   ...
326   // Provide a friend overload.
327   template <typename Sink>
328   friend void AbslStringify(Sink& sink, const Point& point) {
329     absl::Format(&sink, "(%d, %d)", point.x, point.y);
330   }
331
332   int x;
333   int y;
334 };
335
336 // If you can't declare the function in the class it's important that the
337 // AbslStringify overload is defined in the SAME namespace that defines Point.
338 // C++'s look-up rules rely on that.
339 enum class EnumWithStringify { kMany = 0, kChoices = 1 };
340
341 template <typename Sink>
342 void AbslStringify(Sink& sink, EnumWithStringify e) {
343   absl::Format(&sink, "%s", e == EnumWithStringify::kMany ? "Many" : "Choices");
344 }
345
346 }  // namespace foo
347 ```
348
349 {: .callout .note}
350 Note: `AbslStringify()` utilizes a generic "sink" buffer to construct its
351 string. For more information about supported operations on `AbslStringify()`'s
352 sink, see go/abslstringify.
353
354 `AbslStringify()` can also use `absl::StrFormat`'s catch-all `%v` type specifier
355 within its own format strings to perform type deduction. `Point` above could be
356 formatted as `"(%v, %v)"` for example, and deduce the `int` values as `%d`.
357
358 Sometimes, `AbslStringify()` might not be an option: your team may wish to print
359 types with extra debugging information for testing purposes only. If so, you can
360 instead define a `PrintTo()` function like this:
361
362 ```c++
363 #include <ostream>
364
365 namespace foo {
366
367 class Point {
368   ...
369   friend void PrintTo(const Point& point, std::ostream* os) {
370     *os << "(" << point.x << "," << point.y << ")";
371   }
372
373   int x;
374   int y;
375 };
376
377 // If you can't declare the function in the class it's important that PrintTo()
378 // is defined in the SAME namespace that defines Point.  C++'s look-up rules
379 // rely on that.
380 void PrintTo(const Point& point, std::ostream* os) {
381     *os << "(" << point.x << "," << point.y << ")";
382 }
383
384 }  // namespace foo
385 ```
386
387 If you have defined both `AbslStringify()` and `PrintTo()`, the latter will be
388 used by GoogleTest. This allows you to customize how the value appears in
389 GoogleTest's output without affecting code that relies on the behavior of
390 `AbslStringify()`.
391
392 If you have an existing `<<` operator and would like to define an
393 `AbslStringify()`, the latter will be used for GoogleTest printing.
394
395 If you want to print a value `x` using GoogleTest's value printer yourself, just
396 call `::testing::PrintToString(x)`, which returns an `std::string`:
397
398 ```c++
399 vector<pair<Point, int> > point_ints = GetPointIntVector();
400
401 EXPECT_TRUE(IsCorrectPointIntVector(point_ints))
402     << "point_ints = " << testing::PrintToString(point_ints);
403 ```
404
405 For more details regarding `AbslStringify()` and its integration with other
406 libraries, see go/abslstringify.
407
408 ## Death Tests
409
410 In many applications, there are assertions that can cause application failure if
411 a condition is not met. These consistency checks, which ensure that the program
412 is in a known good state, are there to fail at the earliest possible time after
413 some program state is corrupted. If the assertion checks the wrong condition,
414 then the program may proceed in an erroneous state, which could lead to memory
415 corruption, security holes, or worse. Hence it is vitally important to test that
416 such assertion statements work as expected.
417
418 Since these precondition checks cause the processes to die, we call such tests
419 _death tests_. More generally, any test that checks that a program terminates
420 (except by throwing an exception) in an expected fashion is also a death test.
421
422 Note that if a piece of code throws an exception, we don't consider it "death"
423 for the purpose of death tests, as the caller of the code could catch the
424 exception and avoid the crash. If you want to verify exceptions thrown by your
425 code, see [Exception Assertions](#ExceptionAssertions).
426
427 If you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see
428 ["Catching" Failures](#catching-failures).
429
430 ### How to Write a Death Test
431
432 GoogleTest provides assertion macros to support death tests. See
433 [Death Assertions](reference/assertions.md#death) in the Assertions Reference
434 for details.
435
436 To write a death test, simply use one of the macros inside your test function.
437 For example,
438
439 ```c++
440 TEST(MyDeathTest, Foo) {
441   // This death test uses a compound statement.
442   ASSERT_DEATH({
443     int n = 5;
444     Foo(&n);
445   }, "Error on line .* of Foo()");
446 }
447
448 TEST(MyDeathTest, NormalExit) {
449   EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success");
450 }
451
452 TEST(MyDeathTest, KillProcess) {
453   EXPECT_EXIT(KillProcess(), testing::KilledBySignal(SIGKILL),
454               "Sending myself unblockable signal");
455 }
456 ```
457
458 verifies that:
459
460 *   calling `Foo(5)` causes the process to die with the given error message,
461 *   calling `NormalExit()` causes the process to print `"Success"` to stderr and
462     exit with exit code 0, and
463 *   calling `KillProcess()` kills the process with signal `SIGKILL`.
464
465 The test function body may contain other assertions and statements as well, if
466 necessary.
467
468 Note that a death test only cares about three things:
469
470 1.  does `statement` abort or exit the process?
471 2.  (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status
472     satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`)
473     is the exit status non-zero? And
474 3.  does the stderr output match `matcher`?
475
476 In particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it
477 will **not** cause the death test to fail, as GoogleTest assertions don't abort
478 the process.
479
480 ### Death Test Naming
481
482 {: .callout .important}
483 IMPORTANT: We strongly recommend you to follow the convention of naming your
484 **test suite** (not test) `*DeathTest` when it contains a death test, as
485 demonstrated in the above example. The
486 [Death Tests And Threads](#death-tests-and-threads) section below explains why.
487
488 If a test fixture class is shared by normal tests and death tests, you can use
489 `using` or `typedef` to introduce an alias for the fixture class and avoid
490 duplicating its code:
491
492 ```c++
493 class FooTest : public testing::Test { ... };
494
495 using FooDeathTest = FooTest;
496
497 TEST_F(FooTest, DoesThis) {
498   // normal test
499 }
500
501 TEST_F(FooDeathTest, DoesThat) {
502   // death test
503 }
504 ```
505
506 ### Regular Expression Syntax
507
508 When built with Bazel and using Abseil, GoogleTest uses the
509 [RE2](https://github.com/google/re2/wiki/Syntax) syntax. Otherwise, for POSIX
510 systems (Linux, Cygwin, Mac), GoogleTest uses the
511 [POSIX extended regular expression](http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04)
512 syntax. To learn about POSIX syntax, you may want to read this
513 [Wikipedia entry](http://en.wikipedia.org/wiki/Regular_expression#POSIX_extended).
514
515 On Windows, GoogleTest uses its own simple regular expression implementation. It
516 lacks many features. For example, we don't support union (`"x|y"`), grouping
517 (`"(xy)"`), brackets (`"[xy]"`), and repetition count (`"x{5,7}"`), among
518 others. Below is what we do support (`A` denotes a literal character, period
519 (`.`), or a single `\\ ` escape sequence; `x` and `y` denote regular
520 expressions.):
521
522 Expression | Meaning
523 ---------- | --------------------------------------------------------------
524 `c`        | matches any literal character `c`
525 `\\d`      | matches any decimal digit
526 `\\D`      | matches any character that's not a decimal digit
527 `\\f`      | matches `\f`
528 `\\n`      | matches `\n`
529 `\\r`      | matches `\r`
530 `\\s`      | matches any ASCII whitespace, including `\n`
531 `\\S`      | matches any character that's not a whitespace
532 `\\t`      | matches `\t`
533 `\\v`      | matches `\v`
534 `\\w`      | matches any letter, `_`, or decimal digit
535 `\\W`      | matches any character that `\\w` doesn't match
536 `\\c`      | matches any literal character `c`, which must be a punctuation
537 `.`        | matches any single character except `\n`
538 `A?`       | matches 0 or 1 occurrences of `A`
539 `A*`       | matches 0 or many occurrences of `A`
540 `A+`       | matches 1 or many occurrences of `A`
541 `^`        | matches the beginning of a string (not that of each line)
542 `$`        | matches the end of a string (not that of each line)
543 `xy`       | matches `x` followed by `y`
544
545 To help you determine which capability is available on your system, GoogleTest
546 defines macros to govern which regular expression it is using. The macros are:
547 `GTEST_USES_SIMPLE_RE=1` or `GTEST_USES_POSIX_RE=1`. If you want your death
548 tests to work in all cases, you can either `#if` on these macros or use the more
549 limited syntax only.
550
551 ### How It Works
552
553 See [Death Assertions](reference/assertions.md#death) in the Assertions
554 Reference.
555
556 ### Death Tests And Threads
557
558 The reason for the two death test styles has to do with thread safety. Due to
559 well-known problems with forking in the presence of threads, death tests should
560 be run in a single-threaded context. Sometimes, however, it isn't feasible to
561 arrange that kind of environment. For example, statically-initialized modules
562 may start threads before main is ever reached. Once threads have been created,
563 it may be difficult or impossible to clean them up.
564
565 GoogleTest has three features intended to raise awareness of threading issues.
566
567 1.  A warning is emitted if multiple threads are running when a death test is
568     encountered.
569 2.  Test suites with a name ending in "DeathTest" are run before all other
570     tests.
571 3.  It uses `clone()` instead of `fork()` to spawn the child process on Linux
572     (`clone()` is not available on Cygwin and Mac), as `fork()` is more likely
573     to cause the child to hang when the parent process has multiple threads.
574
575 It's perfectly fine to create threads inside a death test statement; they are
576 executed in a separate process and cannot affect the parent.
577
578 ### Death Test Styles
579
580 The "threadsafe" death test style was introduced in order to help mitigate the
581 risks of testing in a possibly multithreaded environment. It trades increased
582 test execution time (potentially dramatically so) for improved thread safety.
583
584 The automated testing framework does not set the style flag. You can choose a
585 particular style of death tests by setting the flag programmatically:
586
587 ```c++
588 GTEST_FLAG_SET(death_test_style, "threadsafe");
589 ```
590
591 You can do this in `main()` to set the style for all death tests in the binary,
592 or in individual tests. Recall that flags are saved before running each test and
593 restored afterwards, so you need not do that yourself. For example:
594
595 ```c++
596 int main(int argc, char** argv) {
597   testing::InitGoogleTest(&argc, argv);
598   GTEST_FLAG_SET(death_test_style, "fast");
599   return RUN_ALL_TESTS();
600 }
601
602 TEST(MyDeathTest, TestOne) {
603   GTEST_FLAG_SET(death_test_style, "threadsafe");
604   // This test is run in the "threadsafe" style:
605   ASSERT_DEATH(ThisShouldDie(), "");
606 }
607
608 TEST(MyDeathTest, TestTwo) {
609   // This test is run in the "fast" style:
610   ASSERT_DEATH(ThisShouldDie(), "");
611 }
612 ```
613
614 ### Caveats
615
616 The `statement` argument of `ASSERT_EXIT()` can be any valid C++ statement. If
617 it leaves the current function via a `return` statement or by throwing an
618 exception, the death test is considered to have failed. Some GoogleTest macros
619 may return from the current function (e.g. `ASSERT_TRUE()`), so be sure to avoid
620 them in `statement`.
621
622 Since `statement` runs in the child process, any in-memory side effect (e.g.
623 modifying a variable, releasing memory, etc) it causes will *not* be observable
624 in the parent process. In particular, if you release memory in a death test,
625 your program will fail the heap check as the parent process will never see the
626 memory reclaimed. To solve this problem, you can
627
628 1.  try not to free memory in a death test;
629 2.  free the memory again in the parent process; or
630 3.  do not use the heap checker in your program.
631
632 Due to an implementation detail, you cannot place multiple death test assertions
633 on the same line; otherwise, compilation will fail with an unobvious error
634 message.
635
636 Despite the improved thread safety afforded by the "threadsafe" style of death
637 test, thread problems such as deadlock are still possible in the presence of
638 handlers registered with `pthread_atfork(3)`.
639
640 ## Using Assertions in Sub-routines
641
642 {: .callout .note}
643 Note: If you want to put a series of test assertions in a subroutine to check
644 for a complex condition, consider using
645 [a custom GMock matcher](gmock_cook_book.md#NewMatchers) instead. This lets you
646 provide a more readable error message in case of failure and avoid all of the
647 issues described below.
648
649 ### Adding Traces to Assertions
650
651 If a test sub-routine is called from several places, when an assertion inside it
652 fails, it can be hard to tell which invocation of the sub-routine the failure is
653 from. You can alleviate this problem using extra logging or custom failure
654 messages, but that usually clutters up your tests. A better solution is to use
655 the `SCOPED_TRACE` macro or the `ScopedTrace` utility:
656
657 ```c++
658 SCOPED_TRACE(message);
659 ```
660
661 ```c++
662 ScopedTrace trace("file_path", line_number, message);
663 ```
664
665 where `message` can be anything streamable to `std::ostream`. `SCOPED_TRACE`
666 macro will cause the current file name, line number, and the given message to be
667 added in every failure message. `ScopedTrace` accepts explicit file name and
668 line number in arguments, which is useful for writing test helpers. The effect
669 will be undone when the control leaves the current lexical scope.
670
671 For example,
672
673 ```c++
674 10: void Sub1(int n) {
675 11:   EXPECT_EQ(Bar(n), 1);
676 12:   EXPECT_EQ(Bar(n + 1), 2);
677 13: }
678 14:
679 15: TEST(FooTest, Bar) {
680 16:   {
681 17:     SCOPED_TRACE("A");  // This trace point will be included in
682 18:                         // every failure in this scope.
683 19:     Sub1(1);
684 20:   }
685 21:   // Now it won't.
686 22:   Sub1(9);
687 23: }
688 ```
689
690 could result in messages like these:
691
692 ```none
693 path/to/foo_test.cc:11: Failure
694 Value of: Bar(n)
695 Expected: 1
696   Actual: 2
697 Google Test trace:
698 path/to/foo_test.cc:17: A
699
700 path/to/foo_test.cc:12: Failure
701 Value of: Bar(n + 1)
702 Expected: 2
703   Actual: 3
704 ```
705
706 Without the trace, it would've been difficult to know which invocation of
707 `Sub1()` the two failures come from respectively. (You could add an extra
708 message to each assertion in `Sub1()` to indicate the value of `n`, but that's
709 tedious.)
710
711 Some tips on using `SCOPED_TRACE`:
712
713 1.  With a suitable message, it's often enough to use `SCOPED_TRACE` at the
714     beginning of a sub-routine, instead of at each call site.
715 2.  When calling sub-routines inside a loop, make the loop iterator part of the
716     message in `SCOPED_TRACE` such that you can know which iteration the failure
717     is from.
718 3.  Sometimes the line number of the trace point is enough for identifying the
719     particular invocation of a sub-routine. In this case, you don't have to
720     choose a unique message for `SCOPED_TRACE`. You can simply use `""`.
721 4.  You can use `SCOPED_TRACE` in an inner scope when there is one in the outer
722     scope. In this case, all active trace points will be included in the failure
723     messages, in reverse order they are encountered.
724 5.  The trace dump is clickable in Emacs - hit `return` on a line number and
725     you'll be taken to that line in the source file!
726
727 ### Propagating Fatal Failures
728
729 A common pitfall when using `ASSERT_*` and `FAIL*` is not understanding that
730 when they fail they only abort the _current function_, not the entire test. For
731 example, the following test will segfault:
732
733 ```c++
734 void Subroutine() {
735   // Generates a fatal failure and aborts the current function.
736   ASSERT_EQ(1, 2);
737
738   // The following won't be executed.
739   ...
740 }
741
742 TEST(FooTest, Bar) {
743   Subroutine();  // The intended behavior is for the fatal failure
744                  // in Subroutine() to abort the entire test.
745
746   // The actual behavior: the function goes on after Subroutine() returns.
747   int* p = nullptr;
748   *p = 3;  // Segfault!
749 }
750 ```
751
752 To alleviate this, GoogleTest provides three different solutions. You could use
753 either exceptions, the `(ASSERT|EXPECT)_NO_FATAL_FAILURE` assertions or the
754 `HasFatalFailure()` function. They are described in the following two
755 subsections.
756
757 #### Asserting on Subroutines with an exception
758
759 The following code can turn ASSERT-failure into an exception:
760
761 ```c++
762 class ThrowListener : public testing::EmptyTestEventListener {
763   void OnTestPartResult(const testing::TestPartResult& result) override {
764     if (result.type() == testing::TestPartResult::kFatalFailure) {
765       throw testing::AssertionException(result);
766     }
767   }
768 };
769 int main(int argc, char** argv) {
770   ...
771   testing::UnitTest::GetInstance()->listeners().Append(new ThrowListener);
772   return RUN_ALL_TESTS();
773 }
774 ```
775
776 This listener should be added after other listeners if you have any, otherwise
777 they won't see failed `OnTestPartResult`.
778
779 #### Asserting on Subroutines
780
781 As shown above, if your test calls a subroutine that has an `ASSERT_*` failure
782 in it, the test will continue after the subroutine returns. This may not be what
783 you want.
784
785 Often people want fatal failures to propagate like exceptions. For that
786 GoogleTest offers the following macros:
787
788 Fatal assertion                       | Nonfatal assertion                    | Verifies
789 ------------------------------------- | ------------------------------------- | --------
790 `ASSERT_NO_FATAL_FAILURE(statement);` | `EXPECT_NO_FATAL_FAILURE(statement);` | `statement` doesn't generate any new fatal failures in the current thread.
791
792 Only failures in the thread that executes the assertion are checked to determine
793 the result of this type of assertions. If `statement` creates new threads,
794 failures in these threads are ignored.
795
796 Examples:
797
798 ```c++
799 ASSERT_NO_FATAL_FAILURE(Foo());
800
801 int i;
802 EXPECT_NO_FATAL_FAILURE({
803   i = Bar();
804 });
805 ```
806
807 Assertions from multiple threads are currently not supported on Windows.
808
809 #### Checking for Failures in the Current Test
810
811 `HasFatalFailure()` in the `::testing::Test` class returns `true` if an
812 assertion in the current test has suffered a fatal failure. This allows
813 functions to catch fatal failures in a sub-routine and return early.
814
815 ```c++
816 class Test {
817  public:
818   ...
819   static bool HasFatalFailure();
820 };
821 ```
822
823 The typical usage, which basically simulates the behavior of a thrown exception,
824 is:
825
826 ```c++
827 TEST(FooTest, Bar) {
828   Subroutine();
829   // Aborts if Subroutine() had a fatal failure.
830   if (HasFatalFailure()) return;
831
832   // The following won't be executed.
833   ...
834 }
835 ```
836
837 If `HasFatalFailure()` is used outside of `TEST()` , `TEST_F()` , or a test
838 fixture, you must add the `::testing::Test::` prefix, as in:
839
840 ```c++
841 if (testing::Test::HasFatalFailure()) return;
842 ```
843
844 Similarly, `HasNonfatalFailure()` returns `true` if the current test has at
845 least one non-fatal failure, and `HasFailure()` returns `true` if the current
846 test has at least one failure of either kind.
847
848 ## Logging Additional Information
849
850 In your test code, you can call `RecordProperty("key", value)` to log additional
851 information, where `value` can be either a string or an `int`. The *last* value
852 recorded for a key will be emitted to the
853 [XML output](#generating-an-xml-report) if you specify one. For example, the
854 test
855
856 ```c++
857 TEST_F(WidgetUsageTest, MinAndMaxWidgets) {
858   RecordProperty("MaximumWidgets", ComputeMaxUsage());
859   RecordProperty("MinimumWidgets", ComputeMinUsage());
860 }
861 ```
862
863 will output XML like this:
864
865 ```xml
866   ...
867     <testcase name="MinAndMaxWidgets" file="test.cpp" line="1" status="run" time="0.006" classname="WidgetUsageTest" MaximumWidgets="12" MinimumWidgets="9" />
868   ...
869 ```
870
871 {: .callout .note}
872 > NOTE:
873 >
874 > *   `RecordProperty()` is a static member of the `Test` class. Therefore it
875 >     needs to be prefixed with `::testing::Test::` if used outside of the
876 >     `TEST` body and the test fixture class.
877 > *   *`key`* must be a valid XML attribute name, and cannot conflict with the
878 >     ones already used by GoogleTest (`name`, `status`, `time`, `classname`,
879 >     `type_param`, and `value_param`).
880 > *   Calling `RecordProperty()` outside of the lifespan of a test is allowed.
881 >     If it's called outside of a test but between a test suite's
882 >     `SetUpTestSuite()` and `TearDownTestSuite()` methods, it will be
883 >     attributed to the XML element for the test suite. If it's called outside
884 >     of all test suites (e.g. in a test environment), it will be attributed to
885 >     the top-level XML element.
886
887 ## Sharing Resources Between Tests in the Same Test Suite
888
889 GoogleTest creates a new test fixture object for each test in order to make
890 tests independent and easier to debug. However, sometimes tests use resources
891 that are expensive to set up, making the one-copy-per-test model prohibitively
892 expensive.
893
894 If the tests don't change the resource, there's no harm in their sharing a
895 single resource copy. So, in addition to per-test set-up/tear-down, GoogleTest
896 also supports per-test-suite set-up/tear-down. To use it:
897
898 1.  In your test fixture class (say `FooTest` ), declare as `static` some member
899     variables to hold the shared resources.
900 2.  Outside your test fixture class (typically just below it), define those
901     member variables, optionally giving them initial values.
902 3.  In the same test fixture class, define a `static void SetUpTestSuite()`
903     function (remember not to spell it as **`SetupTestSuite`** with a small
904     `u`!) to set up the shared resources and a `static void TearDownTestSuite()`
905     function to tear them down.
906
907 That's it! GoogleTest automatically calls `SetUpTestSuite()` before running the
908 *first test* in the `FooTest` test suite (i.e. before creating the first
909 `FooTest` object), and calls `TearDownTestSuite()` after running the *last test*
910 in it (i.e. after deleting the last `FooTest` object). In between, the tests can
911 use the shared resources.
912
913 Remember that the test order is undefined, so your code can't depend on a test
914 preceding or following another. Also, the tests must either not modify the state
915 of any shared resource, or, if they do modify the state, they must restore the
916 state to its original value before passing control to the next test.
917
918 Note that `SetUpTestSuite()` may be called multiple times for a test fixture
919 class that has derived classes, so you should not expect code in the function
920 body to be run only once. Also, derived classes still have access to shared
921 resources defined as static members, so careful consideration is needed when
922 managing shared resources to avoid memory leaks if shared resources are not
923 properly cleaned up in `TearDownTestSuite()`.
924
925 Here's an example of per-test-suite set-up and tear-down:
926
927 ```c++
928 class FooTest : public testing::Test {
929  protected:
930   // Per-test-suite set-up.
931   // Called before the first test in this test suite.
932   // Can be omitted if not needed.
933   static void SetUpTestSuite() {
934     shared_resource_ = new ...;
935
936     // If `shared_resource_` is **not deleted** in `TearDownTestSuite()`,
937     // reallocation should be prevented because `SetUpTestSuite()` may be called
938     // in subclasses of FooTest and lead to memory leak.
939     //
940     // if (shared_resource_ == nullptr) {
941     //   shared_resource_ = new ...;
942     // }
943   }
944
945   // Per-test-suite tear-down.
946   // Called after the last test in this test suite.
947   // Can be omitted if not needed.
948   static void TearDownTestSuite() {
949     delete shared_resource_;
950     shared_resource_ = nullptr;
951   }
952
953   // You can define per-test set-up logic as usual.
954   void SetUp() override { ... }
955
956   // You can define per-test tear-down logic as usual.
957   void TearDown() override { ... }
958
959   // Some expensive resource shared by all tests.
960   static T* shared_resource_;
961 };
962
963 T* FooTest::shared_resource_ = nullptr;
964
965 TEST_F(FooTest, Test1) {
966   ... you can refer to shared_resource_ here ...
967 }
968
969 TEST_F(FooTest, Test2) {
970   ... you can refer to shared_resource_ here ...
971 }
972 ```
973
974 {: .callout .note}
975 NOTE: Though the above code declares `SetUpTestSuite()` protected, it may
976 sometimes be necessary to declare it public, such as when using it with
977 `TEST_P`.
978
979 ## Global Set-Up and Tear-Down
980
981 Just as you can do set-up and tear-down at the test level and the test suite
982 level, you can also do it at the test program level. Here's how.
983
984 First, you subclass the `::testing::Environment` class to define a test
985 environment, which knows how to set-up and tear-down:
986
987 ```c++
988 class Environment : public ::testing::Environment {
989  public:
990   ~Environment() override {}
991
992   // Override this to define how to set up the environment.
993   void SetUp() override {}
994
995   // Override this to define how to tear down the environment.
996   void TearDown() override {}
997 };
998 ```
999
1000 Then, you register an instance of your environment class with GoogleTest by
1001 calling the `::testing::AddGlobalTestEnvironment()` function:
1002
1003 ```c++
1004 Environment* AddGlobalTestEnvironment(Environment* env);
1005 ```
1006
1007 Now, when `RUN_ALL_TESTS()` is called, it first calls the `SetUp()` method of
1008 each environment object, then runs the tests if none of the environments
1009 reported fatal failures and `GTEST_SKIP()` was not called. `RUN_ALL_TESTS()`
1010 always calls `TearDown()` with each environment object, regardless of whether or
1011 not the tests were run.
1012
1013 It's OK to register multiple environment objects. In this suite, their `SetUp()`
1014 will be called in the order they are registered, and their `TearDown()` will be
1015 called in the reverse order.
1016
1017 Note that GoogleTest takes ownership of the registered environment objects.
1018 Therefore **do not delete them** by yourself.
1019
1020 You should call `AddGlobalTestEnvironment()` before `RUN_ALL_TESTS()` is called,
1021 probably in `main()`. If you use `gtest_main`, you need to call this before
1022 `main()` starts for it to take effect. One way to do this is to define a global
1023 variable like this:
1024
1025 ```c++
1026 testing::Environment* const foo_env =
1027     testing::AddGlobalTestEnvironment(new FooEnvironment);
1028 ```
1029
1030 However, we strongly recommend you to write your own `main()` and call
1031 `AddGlobalTestEnvironment()` there, as relying on initialization of global
1032 variables makes the code harder to read and may cause problems when you register
1033 multiple environments from different translation units and the environments have
1034 dependencies among them (remember that the compiler doesn't guarantee the order
1035 in which global variables from different translation units are initialized).
1036
1037 ## Value-Parameterized Tests
1038
1039 *Value-parameterized tests* allow you to test your code with different
1040 parameters without writing multiple copies of the same test. This is useful in a
1041 number of situations, for example:
1042
1043 *   You have a piece of code whose behavior is affected by one or more
1044     command-line flags. You want to make sure your code performs correctly for
1045     various values of those flags.
1046 *   You want to test different implementations of an OO interface.
1047 *   You want to test your code over various inputs (a.k.a. data-driven testing).
1048     This feature is easy to abuse, so please exercise your good sense when doing
1049     it!
1050
1051 ### How to Write Value-Parameterized Tests
1052
1053 To write value-parameterized tests, first you should define a fixture class. It
1054 must be derived from both `testing::Test` and `testing::WithParamInterface<T>`
1055 (the latter is a pure interface), where `T` is the type of your parameter
1056 values. For convenience, you can just derive the fixture class from
1057 `testing::TestWithParam<T>`, which itself is derived from both `testing::Test`
1058 and `testing::WithParamInterface<T>`. `T` can be any copyable type. If it's a
1059 raw pointer, you are responsible for managing the lifespan of the pointed
1060 values.
1061
1062 {: .callout .note}
1063 NOTE: If your test fixture defines `SetUpTestSuite()` or `TearDownTestSuite()`
1064 they must be declared **public** rather than **protected** in order to use
1065 `TEST_P`.
1066
1067 ```c++
1068 class FooTest :
1069     public testing::TestWithParam<absl::string_view> {
1070   // You can implement all the usual fixture class members here.
1071   // To access the test parameter, call GetParam() from class
1072   // TestWithParam<T>.
1073 };
1074
1075 // Or, when you want to add parameters to a pre-existing fixture class:
1076 class BaseTest : public testing::Test {
1077   ...
1078 };
1079 class BarTest : public BaseTest,
1080                 public testing::WithParamInterface<absl::string_view> {
1081   ...
1082 };
1083 ```
1084
1085 Then, use the `TEST_P` macro to define as many test patterns using this fixture
1086 as you want. The `_P` suffix is for "parameterized" or "pattern", whichever you
1087 prefer to think.
1088
1089 ```c++
1090 TEST_P(FooTest, DoesBlah) {
1091   // Inside a test, access the test parameter with the GetParam() method
1092   // of the TestWithParam<T> class:
1093   EXPECT_TRUE(foo.Blah(GetParam()));
1094   ...
1095 }
1096
1097 TEST_P(FooTest, HasBlahBlah) {
1098   ...
1099 }
1100 ```
1101
1102 Finally, you can use the `INSTANTIATE_TEST_SUITE_P` macro to instantiate the
1103 test suite with any set of parameters you want. GoogleTest defines a number of
1104 functions for generating test parameters—see details at
1105 [`INSTANTIATE_TEST_SUITE_P`](reference/testing.md#INSTANTIATE_TEST_SUITE_P) in
1106 the Testing Reference.
1107
1108 For example, the following statement will instantiate tests from the `FooTest`
1109 test suite each with parameter values `"meeny"`, `"miny"`, and `"moe"` using the
1110 [`Values`](reference/testing.md#param-generators) parameter generator:
1111
1112 ```c++
1113 INSTANTIATE_TEST_SUITE_P(MeenyMinyMoe,
1114                          FooTest,
1115                          testing::Values("meeny", "miny", "moe"));
1116 ```
1117
1118 {: .callout .note}
1119 NOTE: The code above must be placed at global or namespace scope, not at
1120 function scope.
1121
1122 The first argument to `INSTANTIATE_TEST_SUITE_P` is a unique name for the
1123 instantiation of the test suite. The next argument is the name of the test
1124 pattern, and the last is the
1125 [parameter generator](reference/testing.md#param-generators).
1126
1127 The parameter generator expression is not evaluated until GoogleTest is
1128 initialized (via `InitGoogleTest()`). Any prior initialization done in the
1129 `main` function will be accessible from the parameter generator, for example,
1130 the results of flag parsing.
1131
1132 You can instantiate a test pattern more than once, so to distinguish different
1133 instances of the pattern, the instantiation name is added as a prefix to the
1134 actual test suite name. Remember to pick unique prefixes for different
1135 instantiations. The tests from the instantiation above will have these names:
1136
1137 *   `MeenyMinyMoe/FooTest.DoesBlah/0` for `"meeny"`
1138 *   `MeenyMinyMoe/FooTest.DoesBlah/1` for `"miny"`
1139 *   `MeenyMinyMoe/FooTest.DoesBlah/2` for `"moe"`
1140 *   `MeenyMinyMoe/FooTest.HasBlahBlah/0` for `"meeny"`
1141 *   `MeenyMinyMoe/FooTest.HasBlahBlah/1` for `"miny"`
1142 *   `MeenyMinyMoe/FooTest.HasBlahBlah/2` for `"moe"`
1143
1144 You can use these names in [`--gtest_filter`](#running-a-subset-of-the-tests).
1145
1146 The following statement will instantiate all tests from `FooTest` again, each
1147 with parameter values `"cat"` and `"dog"` using the
1148 [`ValuesIn`](reference/testing.md#param-generators) parameter generator:
1149
1150 ```c++
1151 constexpr absl::string_view kPets[] = {"cat", "dog"};
1152 INSTANTIATE_TEST_SUITE_P(Pets, FooTest, testing::ValuesIn(kPets));
1153 ```
1154
1155 The tests from the instantiation above will have these names:
1156
1157 *   `Pets/FooTest.DoesBlah/0` for `"cat"`
1158 *   `Pets/FooTest.DoesBlah/1` for `"dog"`
1159 *   `Pets/FooTest.HasBlahBlah/0` for `"cat"`
1160 *   `Pets/FooTest.HasBlahBlah/1` for `"dog"`
1161
1162 Please note that `INSTANTIATE_TEST_SUITE_P` will instantiate *all* tests in the
1163 given test suite, whether their definitions come before or *after* the
1164 `INSTANTIATE_TEST_SUITE_P` statement.
1165
1166 Additionally, by default, every `TEST_P` without a corresponding
1167 `INSTANTIATE_TEST_SUITE_P` causes a failing test in test suite
1168 `GoogleTestVerification`. If you have a test suite where that omission is not an
1169 error, for example it is in a library that may be linked in for other reasons or
1170 where the list of test cases is dynamic and may be empty, then this check can be
1171 suppressed by tagging the test suite:
1172
1173 ```c++
1174 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(FooTest);
1175 ```
1176
1177 You can see [sample7_unittest.cc] and [sample8_unittest.cc] for more examples.
1178
1179 [sample7_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample7_unittest.cc "Parameterized Test example"
1180 [sample8_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample8_unittest.cc "Parameterized Test example with multiple parameters"
1181
1182 ### Creating Value-Parameterized Abstract Tests
1183
1184 In the above, we define and instantiate `FooTest` in the *same* source file.
1185 Sometimes you may want to define value-parameterized tests in a library and let
1186 other people instantiate them later. This pattern is known as *abstract tests*.
1187 As an example of its application, when you are designing an interface you can
1188 write a standard suite of abstract tests (perhaps using a factory function as
1189 the test parameter) that all implementations of the interface are expected to
1190 pass. When someone implements the interface, they can instantiate your suite to
1191 get all the interface-conformance tests for free.
1192
1193 To define abstract tests, you should organize your code like this:
1194
1195 1.  Put the definition of the parameterized test fixture class (e.g. `FooTest`)
1196     in a header file, say `foo_param_test.h`. Think of this as *declaring* your
1197     abstract tests.
1198 2.  Put the `TEST_P` definitions in `foo_param_test.cc`, which includes
1199     `foo_param_test.h`. Think of this as *implementing* your abstract tests.
1200
1201 Once they are defined, you can instantiate them by including `foo_param_test.h`,
1202 invoking `INSTANTIATE_TEST_SUITE_P()`, and depending on the library target that
1203 contains `foo_param_test.cc`. You can instantiate the same abstract test suite
1204 multiple times, possibly in different source files.
1205
1206 ### Specifying Names for Value-Parameterized Test Parameters
1207
1208 The optional last argument to `INSTANTIATE_TEST_SUITE_P()` allows the user to
1209 specify a function or functor that generates custom test name suffixes based on
1210 the test parameters. The function should accept one argument of type
1211 `testing::TestParamInfo<class ParamType>`, and return `std::string`.
1212
1213 `testing::PrintToStringParamName` is a builtin test suffix generator that
1214 returns the value of `testing::PrintToString(GetParam())`. It does not work for
1215 `std::string` or C strings.
1216
1217 {: .callout .note}
1218 NOTE: test names must be non-empty, unique, and may only contain ASCII
1219 alphanumeric characters. In particular, they
1220 [should not contain underscores](faq.md#why-should-test-suite-names-and-test-names-not-contain-underscore)
1221
1222 ```c++
1223 class MyTestSuite : public testing::TestWithParam<int> {};
1224
1225 TEST_P(MyTestSuite, MyTest)
1226 {
1227   std::cout << "Example Test Param: " << GetParam() << std::endl;
1228 }
1229
1230 INSTANTIATE_TEST_SUITE_P(MyGroup, MyTestSuite, testing::Range(0, 10),
1231                          testing::PrintToStringParamName());
1232 ```
1233
1234 Providing a custom functor allows for more control over test parameter name
1235 generation, especially for types where the automatic conversion does not
1236 generate helpful parameter names (e.g. strings as demonstrated above). The
1237 following example illustrates this for multiple parameters, an enumeration type
1238 and a string, and also demonstrates how to combine generators. It uses a lambda
1239 for conciseness:
1240
1241 ```c++
1242 enum class MyType { MY_FOO = 0, MY_BAR = 1 };
1243
1244 class MyTestSuite : public testing::TestWithParam<std::tuple<MyType, std::string>> {
1245 };
1246
1247 INSTANTIATE_TEST_SUITE_P(
1248     MyGroup, MyTestSuite,
1249     testing::Combine(
1250         testing::Values(MyType::MY_FOO, MyType::MY_BAR),
1251         testing::Values("A", "B")),
1252     [](const testing::TestParamInfo<MyTestSuite::ParamType>& info) {
1253       std::string name = absl::StrCat(
1254           std::get<0>(info.param) == MyType::MY_FOO ? "Foo" : "Bar",
1255           std::get<1>(info.param));
1256       absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_');
1257       return name;
1258     });
1259 ```
1260
1261 ## Typed Tests
1262
1263 Suppose you have multiple implementations of the same interface and want to make
1264 sure that all of them satisfy some common requirements. Or, you may have defined
1265 several types that are supposed to conform to the same "concept" and you want to
1266 verify it. In both cases, you want the same test logic repeated for different
1267 types.
1268
1269 While you can write one `TEST` or `TEST_F` for each type you want to test (and
1270 you may even factor the test logic into a function template that you invoke from
1271 the `TEST`), it's tedious and doesn't scale: if you want `m` tests over `n`
1272 types, you'll end up writing `m*n` `TEST`s.
1273
1274 *Typed tests* allow you to repeat the same test logic over a list of types. You
1275 only need to write the test logic once, although you must know the type list
1276 when writing typed tests. Here's how you do it:
1277
1278 First, define a fixture class template. It should be parameterized by a type.
1279 Remember to derive it from `::testing::Test`:
1280
1281 ```c++
1282 template <typename T>
1283 class FooTest : public testing::Test {
1284  public:
1285   ...
1286   using List = std::list<T>;
1287   static T shared_;
1288   T value_;
1289 };
1290 ```
1291
1292 Next, associate a list of types with the test suite, which will be repeated for
1293 each type in the list:
1294
1295 ```c++
1296 using MyTypes = ::testing::Types<char, int, unsigned int>;
1297 TYPED_TEST_SUITE(FooTest, MyTypes);
1298 ```
1299
1300 The type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE`
1301 macro to parse correctly. Otherwise the compiler will think that each comma in
1302 the type list introduces a new macro argument.
1303
1304 Then, use `TYPED_TEST()` instead of `TEST_F()` to define a typed test for this
1305 test suite. You can repeat this as many times as you want:
1306
1307 ```c++
1308 TYPED_TEST(FooTest, DoesBlah) {
1309   // Inside a test, refer to the special name TypeParam to get the type
1310   // parameter.  Since we are inside a derived class template, C++ requires
1311   // us to visit the members of FooTest via 'this'.
1312   TypeParam n = this->value_;
1313
1314   // To visit static members of the fixture, add the 'TestFixture::'
1315   // prefix.
1316   n += TestFixture::shared_;
1317
1318   // To refer to typedefs in the fixture, add the 'typename TestFixture::'
1319   // prefix.  The 'typename' is required to satisfy the compiler.
1320   typename TestFixture::List values;
1321
1322   values.push_back(n);
1323   ...
1324 }
1325
1326 TYPED_TEST(FooTest, HasPropertyA) { ... }
1327 ```
1328
1329 You can see [sample6_unittest.cc] for a complete example.
1330
1331 [sample6_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample6_unittest.cc "Typed Test example"
1332
1333 ## Type-Parameterized Tests
1334
1335 *Type-parameterized tests* are like typed tests, except that they don't require
1336 you to know the list of types ahead of time. Instead, you can define the test
1337 logic first and instantiate it with different type lists later. You can even
1338 instantiate it more than once in the same program.
1339
1340 If you are designing an interface or concept, you can define a suite of
1341 type-parameterized tests to verify properties that any valid implementation of
1342 the interface/concept should have. Then, the author of each implementation can
1343 just instantiate the test suite with their type to verify that it conforms to
1344 the requirements, without having to write similar tests repeatedly. Here's an
1345 example:
1346
1347 First, define a fixture class template, as we did with typed tests:
1348
1349 ```c++
1350 template <typename T>
1351 class FooTest : public testing::Test {
1352   void DoSomethingInteresting();
1353   ...
1354 };
1355 ```
1356
1357 Next, declare that you will define a type-parameterized test suite:
1358
1359 ```c++
1360 TYPED_TEST_SUITE_P(FooTest);
1361 ```
1362
1363 Then, use `TYPED_TEST_P()` to define a type-parameterized test. You can repeat
1364 this as many times as you want:
1365
1366 ```c++
1367 TYPED_TEST_P(FooTest, DoesBlah) {
1368   // Inside a test, refer to TypeParam to get the type parameter.
1369   TypeParam n = 0;
1370
1371   // You will need to use `this` explicitly to refer to fixture members.
1372   this->DoSomethingInteresting()
1373   ...
1374 }
1375
1376 TYPED_TEST_P(FooTest, HasPropertyA) { ... }
1377 ```
1378
1379 Now the tricky part: you need to register all test patterns using the
1380 `REGISTER_TYPED_TEST_SUITE_P` macro before you can instantiate them. The first
1381 argument of the macro is the test suite name; the rest are the names of the
1382 tests in this test suite:
1383
1384 ```c++
1385 REGISTER_TYPED_TEST_SUITE_P(FooTest,
1386                             DoesBlah, HasPropertyA);
1387 ```
1388
1389 Finally, you are free to instantiate the pattern with the types you want. If you
1390 put the above code in a header file, you can `#include` it in multiple C++
1391 source files and instantiate it multiple times.
1392
1393 ```c++
1394 using MyTypes = ::testing::Types<char, int, unsigned int>;
1395 INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
1396 ```
1397
1398 To distinguish different instances of the pattern, the first argument to the
1399 `INSTANTIATE_TYPED_TEST_SUITE_P` macro is a prefix that will be added to the
1400 actual test suite name. Remember to pick unique prefixes for different
1401 instances.
1402
1403 In the special case where the type list contains only one type, you can write
1404 that type directly without `::testing::Types<...>`, like this:
1405
1406 ```c++
1407 INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int);
1408 ```
1409
1410 You can see [sample6_unittest.cc] for a complete example.
1411
1412 ## Testing Private Code
1413
1414 If you change your software's internal implementation, your tests should not
1415 break as long as the change is not observable by users. Therefore, **per the
1416 black-box testing principle, most of the time you should test your code through
1417 its public interfaces.**
1418
1419 **If you still find yourself needing to test internal implementation code,
1420 consider if there's a better design.** The desire to test internal
1421 implementation is often a sign that the class is doing too much. Consider
1422 extracting an implementation class, and testing it. Then use that implementation
1423 class in the original class.
1424
1425 If you absolutely have to test non-public interface code though, you can. There
1426 are two cases to consider:
1427
1428 *   Static functions ( *not* the same as static member functions!) or unnamed
1429     namespaces, and
1430 *   Private or protected class members
1431
1432 To test them, we use the following special techniques:
1433
1434 *   Both static functions and definitions/declarations in an unnamed namespace
1435     are only visible within the same translation unit. To test them, you can
1436     `#include` the entire `.cc` file being tested in your `*_test.cc` file.
1437     (#including `.cc` files is not a good way to reuse code - you should not do
1438     this in production code!)
1439
1440     However, a better approach is to move the private code into the
1441     `foo::internal` namespace, where `foo` is the namespace your project
1442     normally uses, and put the private declarations in a `*-internal.h` file.
1443     Your production `.cc` files and your tests are allowed to include this
1444     internal header, but your clients are not. This way, you can fully test your
1445     internal implementation without leaking it to your clients.
1446
1447 *   Private class members are only accessible from within the class or by
1448     friends. To access a class' private members, you can declare your test
1449     fixture as a friend to the class and define accessors in your fixture. Tests
1450     using the fixture can then access the private members of your production
1451     class via the accessors in the fixture. Note that even though your fixture
1452     is a friend to your production class, your tests are not automatically
1453     friends to it, as they are technically defined in sub-classes of the
1454     fixture.
1455
1456     Another way to test private members is to refactor them into an
1457     implementation class, which is then declared in a `*-internal.h` file. Your
1458     clients aren't allowed to include this header but your tests can. Such is
1459     called the
1460     [Pimpl](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/the-c-pimpl-r1794/)
1461     (Private Implementation) idiom.
1462
1463     Or, you can declare an individual test as a friend of your class by adding
1464     this line in the class body:
1465
1466     ```c++
1467         FRIEND_TEST(TestSuiteName, TestName);
1468     ```
1469
1470     For example,
1471
1472     ```c++
1473     // foo.h
1474     class Foo {
1475       ...
1476      private:
1477       FRIEND_TEST(FooTest, BarReturnsZeroOnNull);
1478
1479       int Bar(void* x);
1480     };
1481
1482     // foo_test.cc
1483     ...
1484     TEST(FooTest, BarReturnsZeroOnNull) {
1485       Foo foo;
1486       EXPECT_EQ(foo.Bar(NULL), 0);  // Uses Foo's private member Bar().
1487     }
1488     ```
1489
1490     Pay special attention when your class is defined in a namespace. If you want
1491     your test fixtures and tests to be friends of your class, then they must be
1492     defined in the exact same namespace (no anonymous or inline namespaces).
1493
1494     For example, if the code to be tested looks like:
1495
1496     ```c++
1497     namespace my_namespace {
1498
1499     class Foo {
1500       friend class FooTest;
1501       FRIEND_TEST(FooTest, Bar);
1502       FRIEND_TEST(FooTest, Baz);
1503       ... definition of the class Foo ...
1504     };
1505
1506     }  // namespace my_namespace
1507     ```
1508
1509     Your test code should be something like:
1510
1511     ```c++
1512     namespace my_namespace {
1513
1514     class FooTest : public testing::Test {
1515      protected:
1516       ...
1517     };
1518
1519     TEST_F(FooTest, Bar) { ... }
1520     TEST_F(FooTest, Baz) { ... }
1521
1522     }  // namespace my_namespace
1523     ```
1524
1525 ## "Catching" Failures
1526
1527 If you are building a testing utility on top of GoogleTest, you'll want to test
1528 your utility. What framework would you use to test it? GoogleTest, of course.
1529
1530 The challenge is to verify that your testing utility reports failures correctly.
1531 In frameworks that report a failure by throwing an exception, you could catch
1532 the exception and assert on it. But GoogleTest doesn't use exceptions, so how do
1533 we test that a piece of code generates an expected failure?
1534
1535 `"gtest/gtest-spi.h"` contains some constructs to do this.
1536 After #including this header, you can use
1537
1538 ```c++
1539   EXPECT_FATAL_FAILURE(statement, substring);
1540 ```
1541
1542 to assert that `statement` generates a fatal (e.g. `ASSERT_*`) failure in the
1543 current thread whose message contains the given `substring`, or use
1544
1545 ```c++
1546   EXPECT_NONFATAL_FAILURE(statement, substring);
1547 ```
1548
1549 if you are expecting a non-fatal (e.g. `EXPECT_*`) failure.
1550
1551 Only failures in the current thread are checked to determine the result of this
1552 type of expectations. If `statement` creates new threads, failures in these
1553 threads are also ignored. If you want to catch failures in other threads as
1554 well, use one of the following macros instead:
1555
1556 ```c++
1557   EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substring);
1558   EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substring);
1559 ```
1560
1561 {: .callout .note}
1562 NOTE: Assertions from multiple threads are currently not supported on Windows.
1563
1564 For technical reasons, there are some caveats:
1565
1566 1.  You cannot stream a failure message to either macro.
1567
1568 2.  `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot reference
1569     local non-static variables or non-static members of `this` object.
1570
1571 3.  `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot return a
1572     value.
1573
1574 ## Registering tests programmatically
1575
1576 The `TEST` macros handle the vast majority of all use cases, but there are few
1577 where runtime registration logic is required. For those cases, the framework
1578 provides the `::testing::RegisterTest` that allows callers to register arbitrary
1579 tests dynamically.
1580
1581 This is an advanced API only to be used when the `TEST` macros are insufficient.
1582 The macros should be preferred when possible, as they avoid most of the
1583 complexity of calling this function.
1584
1585 It provides the following signature:
1586
1587 ```c++
1588 template <typename Factory>
1589 TestInfo* RegisterTest(const char* test_suite_name, const char* test_name,
1590                        const char* type_param, const char* value_param,
1591                        const char* file, int line, Factory factory);
1592 ```
1593
1594 The `factory` argument is a factory callable (move-constructible) object or
1595 function pointer that creates a new instance of the Test object. It handles
1596 ownership to the caller. The signature of the callable is `Fixture*()`, where
1597 `Fixture` is the test fixture class for the test. All tests registered with the
1598 same `test_suite_name` must return the same fixture type. This is checked at
1599 runtime.
1600
1601 The framework will infer the fixture class from the factory and will call the
1602 `SetUpTestSuite` and `TearDownTestSuite` for it.
1603
1604 Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is
1605 undefined.
1606
1607 Use case example:
1608
1609 ```c++
1610 class MyFixture : public testing::Test {
1611  public:
1612   // All of these optional, just like in regular macro usage.
1613   static void SetUpTestSuite() { ... }
1614   static void TearDownTestSuite() { ... }
1615   void SetUp() override { ... }
1616   void TearDown() override { ... }
1617 };
1618
1619 class MyTest : public MyFixture {
1620  public:
1621   explicit MyTest(int data) : data_(data) {}
1622   void TestBody() override { ... }
1623
1624  private:
1625   int data_;
1626 };
1627
1628 void RegisterMyTests(const std::vector<int>& values) {
1629   for (int v : values) {
1630     testing::RegisterTest(
1631         "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr,
1632         std::to_string(v).c_str(),
1633         __FILE__, __LINE__,
1634         // Important to use the fixture type as the return type here.
1635         [=]() -> MyFixture* { return new MyTest(v); });
1636   }
1637 }
1638 ...
1639 int main(int argc, char** argv) {
1640   testing::InitGoogleTest(&argc, argv);
1641   std::vector<int> values_to_test = LoadValuesFromConfig();
1642   RegisterMyTests(values_to_test);
1643   ...
1644   return RUN_ALL_TESTS();
1645 }
1646 ```
1647
1648 ## Getting the Current Test's Name
1649
1650 Sometimes a function may need to know the name of the currently running test.
1651 For example, you may be using the `SetUp()` method of your test fixture to set
1652 the golden file name based on which test is running. The
1653 [`TestInfo`](reference/testing.md#TestInfo) class has this information.
1654
1655 To obtain a `TestInfo` object for the currently running test, call
1656 `current_test_info()` on the [`UnitTest`](reference/testing.md#UnitTest)
1657 singleton object:
1658
1659 ```c++
1660   // Gets information about the currently running test.
1661   // Do NOT delete the returned object - it's managed by the UnitTest class.
1662   const testing::TestInfo* const test_info =
1663       testing::UnitTest::GetInstance()->current_test_info();
1664
1665   printf("We are in test %s of test suite %s.\n",
1666          test_info->name(),
1667          test_info->test_suite_name());
1668 ```
1669
1670 `current_test_info()` returns a null pointer if no test is running. In
1671 particular, you cannot find the test suite name in `SetUpTestSuite()`,
1672 `TearDownTestSuite()` (where you know the test suite name implicitly), or
1673 functions called from them.
1674
1675 ## Extending GoogleTest by Handling Test Events
1676
1677 GoogleTest provides an **event listener API** to let you receive notifications
1678 about the progress of a test program and test failures. The events you can
1679 listen to include the start and end of the test program, a test suite, or a test
1680 method, among others. You may use this API to augment or replace the standard
1681 console output, replace the XML output, or provide a completely different form
1682 of output, such as a GUI or a database. You can also use test events as
1683 checkpoints to implement a resource leak checker, for example.
1684
1685 ### Defining Event Listeners
1686
1687 To define a event listener, you subclass either
1688 [`testing::TestEventListener`](reference/testing.md#TestEventListener) or
1689 [`testing::EmptyTestEventListener`](reference/testing.md#EmptyTestEventListener)
1690 The former is an (abstract) interface, where *each pure virtual method can be
1691 overridden to handle a test event* (For example, when a test starts, the
1692 `OnTestStart()` method will be called.). The latter provides an empty
1693 implementation of all methods in the interface, such that a subclass only needs
1694 to override the methods it cares about.
1695
1696 When an event is fired, its context is passed to the handler function as an
1697 argument. The following argument types are used:
1698
1699 *   UnitTest reflects the state of the entire test program,
1700 *   TestSuite has information about a test suite, which can contain one or more
1701     tests,
1702 *   TestInfo contains the state of a test, and
1703 *   TestPartResult represents the result of a test assertion.
1704
1705 An event handler function can examine the argument it receives to find out
1706 interesting information about the event and the test program's state.
1707
1708 Here's an example:
1709
1710 ```c++
1711   class MinimalistPrinter : public testing::EmptyTestEventListener {
1712     // Called before a test starts.
1713     void OnTestStart(const testing::TestInfo& test_info) override {
1714       printf("*** Test %s.%s starting.\n",
1715              test_info.test_suite_name(), test_info.name());
1716     }
1717
1718     // Called after a failed assertion or a SUCCESS().
1719     void OnTestPartResult(const testing::TestPartResult& test_part_result) override {
1720       printf("%s in %s:%d\n%s\n",
1721              test_part_result.failed() ? "*** Failure" : "Success",
1722              test_part_result.file_name(),
1723              test_part_result.line_number(),
1724              test_part_result.summary());
1725     }
1726
1727     // Called after a test ends.
1728     void OnTestEnd(const testing::TestInfo& test_info) override {
1729       printf("*** Test %s.%s ending.\n",
1730              test_info.test_suite_name(), test_info.name());
1731     }
1732   };
1733 ```
1734
1735 ### Using Event Listeners
1736
1737 To use the event listener you have defined, add an instance of it to the
1738 GoogleTest event listener list (represented by class
1739 [`TestEventListeners`](reference/testing.md#TestEventListeners) - note the "s"
1740 at the end of the name) in your `main()` function, before calling
1741 `RUN_ALL_TESTS()`:
1742
1743 ```c++
1744 int main(int argc, char** argv) {
1745   testing::InitGoogleTest(&argc, argv);
1746   // Gets hold of the event listener list.
1747   testing::TestEventListeners& listeners =
1748       testing::UnitTest::GetInstance()->listeners();
1749   // Adds a listener to the end.  GoogleTest takes the ownership.
1750   listeners.Append(new MinimalistPrinter);
1751   return RUN_ALL_TESTS();
1752 }
1753 ```
1754
1755 There's only one problem: the default test result printer is still in effect, so
1756 its output will mingle with the output from your minimalist printer. To suppress
1757 the default printer, just release it from the event listener list and delete it.
1758 You can do so by adding one line:
1759
1760 ```c++
1761   ...
1762   delete listeners.Release(listeners.default_result_printer());
1763   listeners.Append(new MinimalistPrinter);
1764   return RUN_ALL_TESTS();
1765 ```
1766
1767 Now, sit back and enjoy a completely different output from your tests. For more
1768 details, see [sample9_unittest.cc].
1769
1770 [sample9_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample9_unittest.cc "Event listener example"
1771
1772 You may append more than one listener to the list. When an `On*Start()` or
1773 `OnTestPartResult()` event is fired, the listeners will receive it in the order
1774 they appear in the list (since new listeners are added to the end of the list,
1775 the default text printer and the default XML generator will receive the event
1776 first). An `On*End()` event will be received by the listeners in the *reverse*
1777 order. This allows output by listeners added later to be framed by output from
1778 listeners added earlier.
1779
1780 ### Generating Failures in Listeners
1781
1782 You may use failure-raising macros (`EXPECT_*()`, `ASSERT_*()`, `FAIL()`, etc)
1783 when processing an event. There are some restrictions:
1784
1785 1.  You cannot generate any failure in `OnTestPartResult()` (otherwise it will
1786     cause `OnTestPartResult()` to be called recursively).
1787 2.  A listener that handles `OnTestPartResult()` is not allowed to generate any
1788     failure.
1789
1790 When you add listeners to the listener list, you should put listeners that
1791 handle `OnTestPartResult()` *before* listeners that can generate failures. This
1792 ensures that failures generated by the latter are attributed to the right test
1793 by the former.
1794
1795 See [sample10_unittest.cc] for an example of a failure-raising listener.
1796
1797 [sample10_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample10_unittest.cc "Failure-raising listener example"
1798
1799 ## Running Test Programs: Advanced Options
1800
1801 GoogleTest test programs are ordinary executables. Once built, you can run them
1802 directly and affect their behavior via the following environment variables
1803 and/or command line flags. For the flags to work, your programs must call
1804 `::testing::InitGoogleTest()` before calling `RUN_ALL_TESTS()`.
1805
1806 To see a list of supported flags and their usage, please run your test program
1807 with the `--help` flag. You can also use `-h`, `-?`, or `/?` for short.
1808
1809 If an option is specified both by an environment variable and by a flag, the
1810 latter takes precedence.
1811
1812 ### Selecting Tests
1813
1814 #### Listing Test Names
1815
1816 Sometimes it is necessary to list the available tests in a program before
1817 running them so that a filter may be applied if needed. Including the flag
1818 `--gtest_list_tests` overrides all other flags and lists tests in the following
1819 format:
1820
1821 ```none
1822 TestSuite1.
1823   TestName1
1824   TestName2
1825 TestSuite2.
1826   TestName
1827 ```
1828
1829 None of the tests listed are actually run if the flag is provided. There is no
1830 corresponding environment variable for this flag.
1831
1832 #### Running a Subset of the Tests
1833
1834 By default, a GoogleTest program runs all tests the user has defined. Sometimes,
1835 you want to run only a subset of the tests (e.g. for debugging or quickly
1836 verifying a change). If you set the `GTEST_FILTER` environment variable or the
1837 `--gtest_filter` flag to a filter string, GoogleTest will only run the tests
1838 whose full names (in the form of `TestSuiteName.TestName`) match the filter.
1839
1840 The format of a filter is a '`:`'-separated list of wildcard patterns (called
1841 the *positive patterns*) optionally followed by a '`-`' and another
1842 '`:`'-separated pattern list (called the *negative patterns*). A test matches
1843 the filter if and only if it matches any of the positive patterns but does not
1844 match any of the negative patterns.
1845
1846 A pattern may contain `'*'` (matches any string) or `'?'` (matches any single
1847 character). For convenience, the filter `'*-NegativePatterns'` can be also
1848 written as `'-NegativePatterns'`.
1849
1850 For example:
1851
1852 *   `./foo_test` Has no flag, and thus runs all its tests.
1853 *   `./foo_test --gtest_filter=*` Also runs everything, due to the single
1854     match-everything `*` value.
1855 *   `./foo_test --gtest_filter=FooTest.*` Runs everything in test suite
1856     `FooTest` .
1857 *   `./foo_test --gtest_filter=*Null*:*Constructor*` Runs any test whose full
1858     name contains either `"Null"` or `"Constructor"` .
1859 *   `./foo_test --gtest_filter=-*DeathTest.*` Runs all non-death tests.
1860 *   `./foo_test --gtest_filter=FooTest.*-FooTest.Bar` Runs everything in test
1861     suite `FooTest` except `FooTest.Bar`.
1862 *   `./foo_test --gtest_filter=FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo` Runs
1863     everything in test suite `FooTest` except `FooTest.Bar` and everything in
1864     test suite `BarTest` except `BarTest.Foo`.
1865
1866 #### Stop test execution upon first failure
1867
1868 By default, a GoogleTest program runs all tests the user has defined. In some
1869 cases (e.g. iterative test development & execution) it may be desirable stop
1870 test execution upon first failure (trading improved latency for completeness).
1871 If `GTEST_FAIL_FAST` environment variable or `--gtest_fail_fast` flag is set,
1872 the test runner will stop execution as soon as the first test failure is found.
1873
1874 #### Temporarily Disabling Tests
1875
1876 If you have a broken test that you cannot fix right away, you can add the
1877 `DISABLED_` prefix to its name. This will exclude it from execution. This is
1878 better than commenting out the code or using `#if 0`, as disabled tests are
1879 still compiled (and thus won't rot).
1880
1881 If you need to disable all tests in a test suite, you can either add `DISABLED_`
1882 to the front of the name of each test, or alternatively add it to the front of
1883 the test suite name.
1884
1885 For example, the following tests won't be run by GoogleTest, even though they
1886 will still be compiled:
1887
1888 ```c++
1889 // Tests that Foo does Abc.
1890 TEST(FooTest, DISABLED_DoesAbc) { ... }
1891
1892 class DISABLED_BarTest : public testing::Test { ... };
1893
1894 // Tests that Bar does Xyz.
1895 TEST_F(DISABLED_BarTest, DoesXyz) { ... }
1896 ```
1897
1898 {: .callout .note}
1899 NOTE: This feature should only be used for temporary pain-relief. You still have
1900 to fix the disabled tests at a later date. As a reminder, GoogleTest will print
1901 a banner warning you if a test program contains any disabled tests.
1902
1903 {: .callout .tip}
1904 TIP: You can easily count the number of disabled tests you have using
1905 `grep`. This number can be used as a metric for
1906 improving your test quality.
1907
1908 #### Temporarily Enabling Disabled Tests
1909
1910 To include disabled tests in test execution, just invoke the test program with
1911 the `--gtest_also_run_disabled_tests` flag or set the
1912 `GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other than `0`.
1913 You can combine this with the `--gtest_filter` flag to further select which
1914 disabled tests to run.
1915
1916 ### Repeating the Tests
1917
1918 Once in a while you'll run into a test whose result is hit-or-miss. Perhaps it
1919 will fail only 1% of the time, making it rather hard to reproduce the bug under
1920 a debugger. This can be a major source of frustration.
1921
1922 The `--gtest_repeat` flag allows you to repeat all (or selected) test methods in
1923 a program many times. Hopefully, a flaky test will eventually fail and give you
1924 a chance to debug. Here's how to use it:
1925
1926 ```none
1927 $ foo_test --gtest_repeat=1000
1928 Repeat foo_test 1000 times and don't stop at failures.
1929
1930 $ foo_test --gtest_repeat=-1
1931 A negative count means repeating forever.
1932
1933 $ foo_test --gtest_repeat=1000 --gtest_break_on_failure
1934 Repeat foo_test 1000 times, stopping at the first failure.  This
1935 is especially useful when running under a debugger: when the test
1936 fails, it will drop into the debugger and you can then inspect
1937 variables and stacks.
1938
1939 $ foo_test --gtest_repeat=1000 --gtest_filter=FooBar.*
1940 Repeat the tests whose name matches the filter 1000 times.
1941 ```
1942
1943 If your test program contains
1944 [global set-up/tear-down](#global-set-up-and-tear-down) code, it will be
1945 repeated in each iteration as well, as the flakiness may be in it. To avoid
1946 repeating global set-up/tear-down, specify
1947 `--gtest_recreate_environments_when_repeating=false`{.nowrap}.
1948
1949 You can also specify the repeat count by setting the `GTEST_REPEAT` environment
1950 variable.
1951
1952 ### Shuffling the Tests
1953
1954 You can specify the `--gtest_shuffle` flag (or set the `GTEST_SHUFFLE`
1955 environment variable to `1`) to run the tests in a program in a random order.
1956 This helps to reveal bad dependencies between tests.
1957
1958 By default, GoogleTest uses a random seed calculated from the current time.
1959 Therefore you'll get a different order every time. The console output includes
1960 the random seed value, such that you can reproduce an order-related test failure
1961 later. To specify the random seed explicitly, use the `--gtest_random_seed=SEED`
1962 flag (or set the `GTEST_RANDOM_SEED` environment variable), where `SEED` is an
1963 integer in the range [0, 99999]. The seed value 0 is special: it tells
1964 GoogleTest to do the default behavior of calculating the seed from the current
1965 time.
1966
1967 If you combine this with `--gtest_repeat=N`, GoogleTest will pick a different
1968 random seed and re-shuffle the tests in each iteration.
1969
1970 ### Distributing Test Functions to Multiple Machines
1971
1972 If you have more than one machine you can use to run a test program, you might
1973 want to run the test functions in parallel and get the result faster. We call
1974 this technique *sharding*, where each machine is called a *shard*.
1975
1976 GoogleTest is compatible with test sharding. To take advantage of this feature,
1977 your test runner (not part of GoogleTest) needs to do the following:
1978
1979 1.  Allocate a number of machines (shards) to run the tests.
1980 1.  On each shard, set the `GTEST_TOTAL_SHARDS` environment variable to the total
1981     number of shards. It must be the same for all shards.
1982 1.  On each shard, set the `GTEST_SHARD_INDEX` environment variable to the index
1983     of the shard. Different shards must be assigned different indices, which
1984     must be in the range `[0, GTEST_TOTAL_SHARDS - 1]`.
1985 1.  Run the same test program on all shards. When GoogleTest sees the above two
1986     environment variables, it will select a subset of the test functions to run.
1987     Across all shards, each test function in the program will be run exactly
1988     once.
1989 1.  Wait for all shards to finish, then collect and report the results.
1990
1991 Your project may have tests that were written without GoogleTest and thus don't
1992 understand this protocol. In order for your test runner to figure out which test
1993 supports sharding, it can set the environment variable `GTEST_SHARD_STATUS_FILE`
1994 to a non-existent file path. If a test program supports sharding, it will create
1995 this file to acknowledge that fact; otherwise it will not create it. The actual
1996 contents of the file are not important at this time, although we may put some
1997 useful information in it in the future.
1998
1999 Here's an example to make it clear. Suppose you have a test program `foo_test`
2000 that contains the following 5 test functions:
2001
2002 ```
2003 TEST(A, V)
2004 TEST(A, W)
2005 TEST(B, X)
2006 TEST(B, Y)
2007 TEST(B, Z)
2008 ```
2009
2010 Suppose you have 3 machines at your disposal. To run the test functions in
2011 parallel, you would set `GTEST_TOTAL_SHARDS` to 3 on all machines, and set
2012 `GTEST_SHARD_INDEX` to 0, 1, and 2 on the machines respectively. Then you would
2013 run the same `foo_test` on each machine.
2014
2015 GoogleTest reserves the right to change how the work is distributed across the
2016 shards, but here's one possible scenario:
2017
2018 *   Machine #0 runs `A.V` and `B.X`.
2019 *   Machine #1 runs `A.W` and `B.Y`.
2020 *   Machine #2 runs `B.Z`.
2021
2022 ### Controlling Test Output
2023
2024 #### Colored Terminal Output
2025
2026 GoogleTest can use colors in its terminal output to make it easier to spot the
2027 important information:
2028
2029 <pre>...
2030 <font color="green">[----------]</font> 1 test from FooTest
2031 <font color="green">[ RUN      ]</font> FooTest.DoesAbc
2032 <font color="green">[       OK ]</font> FooTest.DoesAbc
2033 <font color="green">[----------]</font> 2 tests from BarTest
2034 <font color="green">[ RUN      ]</font> BarTest.HasXyzProperty
2035 <font color="green">[       OK ]</font> BarTest.HasXyzProperty
2036 <font color="green">[ RUN      ]</font> BarTest.ReturnsTrueOnSuccess
2037 ... some error messages ...
2038 <font color="red">[   FAILED ]</font> BarTest.ReturnsTrueOnSuccess
2039 ...
2040 <font color="green">[==========]</font> 30 tests from 14 test suites ran.
2041 <font color="green">[   PASSED ]</font> 28 tests.
2042 <font color="red">[   FAILED ]</font> 2 tests, listed below:
2043 <font color="red">[   FAILED ]</font> BarTest.ReturnsTrueOnSuccess
2044 <font color="red">[   FAILED ]</font> AnotherTest.DoesXyz
2045
2046  2 FAILED TESTS
2047 </pre>
2048
2049 You can set the `GTEST_COLOR` environment variable or the `--gtest_color`
2050 command line flag to `yes`, `no`, or `auto` (the default) to enable colors,
2051 disable colors, or let GoogleTest decide. When the value is `auto`, GoogleTest
2052 will use colors if and only if the output goes to a terminal and (on non-Windows
2053 platforms) the `TERM` environment variable is set to `xterm` or `xterm-color`.
2054
2055 #### Suppressing test passes
2056
2057 By default, GoogleTest prints 1 line of output for each test, indicating if it
2058 passed or failed. To show only test failures, run the test program with
2059 `--gtest_brief=1`, or set the GTEST_BRIEF environment variable to `1`.
2060
2061 #### Suppressing the Elapsed Time
2062
2063 By default, GoogleTest prints the time it takes to run each test. To disable
2064 that, run the test program with the `--gtest_print_time=0` command line flag, or
2065 set the GTEST_PRINT_TIME environment variable to `0`.
2066
2067 #### Suppressing UTF-8 Text Output
2068
2069 In case of assertion failures, GoogleTest prints expected and actual values of
2070 type `string` both as hex-encoded strings as well as in readable UTF-8 text if
2071 they contain valid non-ASCII UTF-8 characters. If you want to suppress the UTF-8
2072 text because, for example, you don't have an UTF-8 compatible output medium, run
2073 the test program with `--gtest_print_utf8=0` or set the `GTEST_PRINT_UTF8`
2074 environment variable to `0`.
2075
2076 #### Generating an XML Report
2077
2078 GoogleTest can emit a detailed XML report to a file in addition to its normal
2079 textual output. The report contains the duration of each test, and thus can help
2080 you identify slow tests.
2081
2082 To generate the XML report, set the `GTEST_OUTPUT` environment variable or the
2083 `--gtest_output` flag to the string `"xml:path_to_output_file"`, which will
2084 create the file at the given location. You can also just use the string `"xml"`,
2085 in which case the output can be found in the `test_detail.xml` file in the
2086 current directory.
2087
2088 If you specify a directory (for example, `"xml:output/directory/"` on Linux or
2089 `"xml:output\directory\"` on Windows), GoogleTest will create the XML file in
2090 that directory, named after the test executable (e.g. `foo_test.xml` for test
2091 program `foo_test` or `foo_test.exe`). If the file already exists (perhaps left
2092 over from a previous run), GoogleTest will pick a different name (e.g.
2093 `foo_test_1.xml`) to avoid overwriting it.
2094
2095 The report is based on the `junitreport` Ant task. Since that format was
2096 originally intended for Java, a little interpretation is required to make it
2097 apply to GoogleTest tests, as shown here:
2098
2099 ```xml
2100 <testsuites name="AllTests" ...>
2101   <testsuite name="test_case_name" ...>
2102     <testcase    name="test_name" ...>
2103       <failure message="..."/>
2104       <failure message="..."/>
2105       <failure message="..."/>
2106     </testcase>
2107   </testsuite>
2108 </testsuites>
2109 ```
2110
2111 *   The root `<testsuites>` element corresponds to the entire test program.
2112 *   `<testsuite>` elements correspond to GoogleTest test suites.
2113 *   `<testcase>` elements correspond to GoogleTest test functions.
2114
2115 For instance, the following program
2116
2117 ```c++
2118 TEST(MathTest, Addition) { ... }
2119 TEST(MathTest, Subtraction) { ... }
2120 TEST(LogicTest, NonContradiction) { ... }
2121 ```
2122
2123 could generate this report:
2124
2125 ```xml
2126 <?xml version="1.0" encoding="UTF-8"?>
2127 <testsuites tests="3" failures="1" errors="0" time="0.035" timestamp="2011-10-31T18:52:42" name="AllTests">
2128   <testsuite name="MathTest" tests="2" failures="1" errors="0" time="0.015">
2129     <testcase name="Addition" file="test.cpp" line="1" status="run" time="0.007" classname="">
2130       <failure message="Value of: add(1, 1)&#x0A;  Actual: 3&#x0A;Expected: 2" type="">...</failure>
2131       <failure message="Value of: add(1, -1)&#x0A;  Actual: 1&#x0A;Expected: 0" type="">...</failure>
2132     </testcase>
2133     <testcase name="Subtraction" file="test.cpp" line="2" status="run" time="0.005" classname="">
2134     </testcase>
2135   </testsuite>
2136   <testsuite name="LogicTest" tests="1" failures="0" errors="0" time="0.005">
2137     <testcase name="NonContradiction" file="test.cpp" line="3" status="run" time="0.005" classname="">
2138     </testcase>
2139   </testsuite>
2140 </testsuites>
2141 ```
2142
2143 Things to note:
2144
2145 *   The `tests` attribute of a `<testsuites>` or `<testsuite>` element tells how
2146     many test functions the GoogleTest program or test suite contains, while the
2147     `failures` attribute tells how many of them failed.
2148
2149 *   The `time` attribute expresses the duration of the test, test suite, or
2150     entire test program in seconds.
2151
2152 *   The `timestamp` attribute records the local date and time of the test
2153     execution.
2154
2155 *   The `file` and `line` attributes record the source file location, where the
2156     test was defined.
2157
2158 *   Each `<failure>` element corresponds to a single failed GoogleTest
2159     assertion.
2160
2161 #### Generating a JSON Report
2162
2163 GoogleTest can also emit a JSON report as an alternative format to XML. To
2164 generate the JSON report, set the `GTEST_OUTPUT` environment variable or the
2165 `--gtest_output` flag to the string `"json:path_to_output_file"`, which will
2166 create the file at the given location. You can also just use the string
2167 `"json"`, in which case the output can be found in the `test_detail.json` file
2168 in the current directory.
2169
2170 The report format conforms to the following JSON Schema:
2171
2172 ```json
2173 {
2174   "$schema": "http://json-schema.org/schema#",
2175   "type": "object",
2176   "definitions": {
2177     "TestCase": {
2178       "type": "object",
2179       "properties": {
2180         "name": { "type": "string" },
2181         "tests": { "type": "integer" },
2182         "failures": { "type": "integer" },
2183         "disabled": { "type": "integer" },
2184         "time": { "type": "string" },
2185         "testsuite": {
2186           "type": "array",
2187           "items": {
2188             "$ref": "#/definitions/TestInfo"
2189           }
2190         }
2191       }
2192     },
2193     "TestInfo": {
2194       "type": "object",
2195       "properties": {
2196         "name": { "type": "string" },
2197         "file": { "type": "string" },
2198         "line": { "type": "integer" },
2199         "status": {
2200           "type": "string",
2201           "enum": ["RUN", "NOTRUN"]
2202         },
2203         "time": { "type": "string" },
2204         "classname": { "type": "string" },
2205         "failures": {
2206           "type": "array",
2207           "items": {
2208             "$ref": "#/definitions/Failure"
2209           }
2210         }
2211       }
2212     },
2213     "Failure": {
2214       "type": "object",
2215       "properties": {
2216         "failures": { "type": "string" },
2217         "type": { "type": "string" }
2218       }
2219     }
2220   },
2221   "properties": {
2222     "tests": { "type": "integer" },
2223     "failures": { "type": "integer" },
2224     "disabled": { "type": "integer" },
2225     "errors": { "type": "integer" },
2226     "timestamp": {
2227       "type": "string",
2228       "format": "date-time"
2229     },
2230     "time": { "type": "string" },
2231     "name": { "type": "string" },
2232     "testsuites": {
2233       "type": "array",
2234       "items": {
2235         "$ref": "#/definitions/TestCase"
2236       }
2237     }
2238   }
2239 }
2240 ```
2241
2242 The report uses the format that conforms to the following Proto3 using the
2243 [JSON encoding](https://developers.google.com/protocol-buffers/docs/proto3#json):
2244
2245 ```proto
2246 syntax = "proto3";
2247
2248 package googletest;
2249
2250 import "google/protobuf/timestamp.proto";
2251 import "google/protobuf/duration.proto";
2252
2253 message UnitTest {
2254   int32 tests = 1;
2255   int32 failures = 2;
2256   int32 disabled = 3;
2257   int32 errors = 4;
2258   google.protobuf.Timestamp timestamp = 5;
2259   google.protobuf.Duration time = 6;
2260   string name = 7;
2261   repeated TestCase testsuites = 8;
2262 }
2263
2264 message TestCase {
2265   string name = 1;
2266   int32 tests = 2;
2267   int32 failures = 3;
2268   int32 disabled = 4;
2269   int32 errors = 5;
2270   google.protobuf.Duration time = 6;
2271   repeated TestInfo testsuite = 7;
2272 }
2273
2274 message TestInfo {
2275   string name = 1;
2276   string file = 6;
2277   int32 line = 7;
2278   enum Status {
2279     RUN = 0;
2280     NOTRUN = 1;
2281   }
2282   Status status = 2;
2283   google.protobuf.Duration time = 3;
2284   string classname = 4;
2285   message Failure {
2286     string failures = 1;
2287     string type = 2;
2288   }
2289   repeated Failure failures = 5;
2290 }
2291 ```
2292
2293 For instance, the following program
2294
2295 ```c++
2296 TEST(MathTest, Addition) { ... }
2297 TEST(MathTest, Subtraction) { ... }
2298 TEST(LogicTest, NonContradiction) { ... }
2299 ```
2300
2301 could generate this report:
2302
2303 ```json
2304 {
2305   "tests": 3,
2306   "failures": 1,
2307   "errors": 0,
2308   "time": "0.035s",
2309   "timestamp": "2011-10-31T18:52:42Z",
2310   "name": "AllTests",
2311   "testsuites": [
2312     {
2313       "name": "MathTest",
2314       "tests": 2,
2315       "failures": 1,
2316       "errors": 0,
2317       "time": "0.015s",
2318       "testsuite": [
2319         {
2320           "name": "Addition",
2321           "file": "test.cpp",
2322           "line": 1,
2323           "status": "RUN",
2324           "time": "0.007s",
2325           "classname": "",
2326           "failures": [
2327             {
2328               "message": "Value of: add(1, 1)\n  Actual: 3\nExpected: 2",
2329               "type": ""
2330             },
2331             {
2332               "message": "Value of: add(1, -1)\n  Actual: 1\nExpected: 0",
2333               "type": ""
2334             }
2335           ]
2336         },
2337         {
2338           "name": "Subtraction",
2339           "file": "test.cpp",
2340           "line": 2,
2341           "status": "RUN",
2342           "time": "0.005s",
2343           "classname": ""
2344         }
2345       ]
2346     },
2347     {
2348       "name": "LogicTest",
2349       "tests": 1,
2350       "failures": 0,
2351       "errors": 0,
2352       "time": "0.005s",
2353       "testsuite": [
2354         {
2355           "name": "NonContradiction",
2356           "file": "test.cpp",
2357           "line": 3,
2358           "status": "RUN",
2359           "time": "0.005s",
2360           "classname": ""
2361         }
2362       ]
2363     }
2364   ]
2365 }
2366 ```
2367
2368 {: .callout .important}
2369 IMPORTANT: The exact format of the JSON document is subject to change.
2370
2371 ### Controlling How Failures Are Reported
2372
2373 #### Detecting Test Premature Exit
2374
2375 Google Test implements the _premature-exit-file_ protocol for test runners to
2376 catch any kind of unexpected exits of test programs. Upon start, Google Test
2377 creates the file which will be automatically deleted after all work has been
2378 finished. Then, the test runner can check if this file exists. In case the file
2379 remains undeleted, the inspected test has exited prematurely.
2380
2381 This feature is enabled only if the `TEST_PREMATURE_EXIT_FILE` environment
2382 variable has been set.
2383
2384 #### Turning Assertion Failures into Break-Points
2385
2386 When running test programs under a debugger, it's very convenient if the
2387 debugger can catch an assertion failure and automatically drop into interactive
2388 mode. GoogleTest's *break-on-failure* mode supports this behavior.
2389
2390 To enable it, set the `GTEST_BREAK_ON_FAILURE` environment variable to a value
2391 other than `0`. Alternatively, you can use the `--gtest_break_on_failure`
2392 command line flag.
2393
2394 #### Disabling Catching Test-Thrown Exceptions
2395
2396 GoogleTest can be used either with or without exceptions enabled. If a test
2397 throws a C++ exception or (on Windows) a structured exception (SEH), by default
2398 GoogleTest catches it, reports it as a test failure, and continues with the next
2399 test method. This maximizes the coverage of a test run. Also, on Windows an
2400 uncaught exception will cause a pop-up window, so catching the exceptions allows
2401 you to run the tests automatically.
2402
2403 When debugging the test failures, however, you may instead want the exceptions
2404 to be handled by the debugger, such that you can examine the call stack when an
2405 exception is thrown. To achieve that, set the `GTEST_CATCH_EXCEPTIONS`
2406 environment variable to `0`, or use the `--gtest_catch_exceptions=0` flag when
2407 running the tests.
2408
2409 ### Sanitizer Integration
2410
2411 The
2412 [Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html),
2413 [Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer),
2414 and
2415 [Thread Sanitizer](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)
2416 all provide weak functions that you can override to trigger explicit failures
2417 when they detect sanitizer errors, such as creating a reference from `nullptr`.
2418 To override these functions, place definitions for them in a source file that
2419 you compile as part of your main binary:
2420
2421 ```
2422 extern "C" {
2423 void __ubsan_on_report() {
2424   FAIL() << "Encountered an undefined behavior sanitizer error";
2425 }
2426 void __asan_on_error() {
2427   FAIL() << "Encountered an address sanitizer error";
2428 }
2429 void __tsan_on_report() {
2430   FAIL() << "Encountered a thread sanitizer error";
2431 }
2432 }  // extern "C"
2433 ```
2434
2435 After compiling your project with one of the sanitizers enabled, if a particular
2436 test triggers a sanitizer error, GoogleTest will report that it failed.