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