1# Assertions Reference 2 3This page lists the assertion macros provided by GoogleTest for verifying code 4behavior. To use them, add `#include <gtest/gtest.h>`. 5 6The majority of the macros listed below come as a pair with an `EXPECT_` variant 7and an `ASSERT_` variant. Upon failure, `EXPECT_` macros generate nonfatal 8failures and allow the current function to continue running, while `ASSERT_` 9macros generate fatal failures and abort the current function. 10 11All assertion macros support streaming a custom failure message into them with 12the `<<` operator, for example: 13 14```cpp 15EXPECT_TRUE(my_condition) << "My condition is not true"; 16``` 17 18Anything that can be streamed to an `ostream` can be streamed to an assertion 19macro—in particular, C strings and string objects. If a wide string (`wchar_t*`, 20`TCHAR*` in `UNICODE` mode on Windows, or `std::wstring`) is streamed to an 21assertion, it will be translated to UTF-8 when printed. 22 23## Explicit Success and Failure {#success-failure} 24 25The assertions in this section generate a success or failure directly instead of 26testing a value or expression. These are useful when control flow, rather than a 27Boolean expression, determines the test's success or failure, as shown by the 28following example: 29 30```c++ 31switch(expression) { 32 case 1: 33 ... some checks ... 34 case 2: 35 ... some other checks ... 36 default: 37 FAIL() << "We shouldn't get here."; 38} 39``` 40 41### SUCCEED {#SUCCEED} 42 43`SUCCEED()` 44 45Generates a success. This *does not* make the overall test succeed. A test is 46considered successful only if none of its assertions fail during its execution. 47 48The `SUCCEED` assertion is purely documentary and currently doesn't generate any 49user-visible output. However, we may add `SUCCEED` messages to GoogleTest output 50in the future. 51 52### FAIL {#FAIL} 53 54`FAIL()` 55 56Generates a fatal failure, which returns from the current function. 57 58Can only be used in functions that return `void`. See 59[Assertion Placement](../advanced.md#assertion-placement) for more information. 60 61### ADD_FAILURE {#ADD_FAILURE} 62 63`ADD_FAILURE()` 64 65Generates a nonfatal failure, which allows the current function to continue 66running. 67 68### ADD_FAILURE_AT {#ADD_FAILURE_AT} 69 70`ADD_FAILURE_AT(`*`file_path`*`,`*`line_number`*`)` 71 72Generates a nonfatal failure at the file and line number specified. 73 74## Generalized Assertion {#generalized} 75 76The following assertion allows [matchers](matchers.md) to be used to verify 77values. 78 79### EXPECT_THAT {#EXPECT_THAT} 80 81`EXPECT_THAT(`*`value`*`,`*`matcher`*`)` \ 82`ASSERT_THAT(`*`value`*`,`*`matcher`*`)` 83 84Verifies that *`value`* matches the [matcher](matchers.md) *`matcher`*. 85 86For example, the following code verifies that the string `value1` starts with 87`"Hello"`, `value2` matches a regular expression, and `value3` is between 5 and 8810: 89 90```cpp 91#include <gmock/gmock.h> 92 93using ::testing::AllOf; 94using ::testing::Gt; 95using ::testing::Lt; 96using ::testing::MatchesRegex; 97using ::testing::StartsWith; 98 99... 100EXPECT_THAT(value1, StartsWith("Hello")); 101EXPECT_THAT(value2, MatchesRegex("Line \\d+")); 102ASSERT_THAT(value3, AllOf(Gt(5), Lt(10))); 103``` 104 105Matchers enable assertions of this form to read like English and generate 106informative failure messages. For example, if the above assertion on `value1` 107fails, the resulting message will be similar to the following: 108 109``` 110Value of: value1 111 Actual: "Hi, world!" 112Expected: starts with "Hello" 113``` 114 115GoogleTest provides a built-in library of matchers—see the 116[Matchers Reference](matchers.md). It is also possible to write your own 117matchers—see [Writing New Matchers Quickly](../gmock_cook_book.md#NewMatchers). 118The use of matchers makes `EXPECT_THAT` a powerful, extensible assertion. 119 120*The idea for this assertion was borrowed from Joe Walnes' Hamcrest project, 121which adds `assertThat()` to JUnit.* 122 123## Boolean Conditions {#boolean} 124 125The following assertions test Boolean conditions. 126 127### EXPECT_TRUE {#EXPECT_TRUE} 128 129`EXPECT_TRUE(`*`condition`*`)` \ 130`ASSERT_TRUE(`*`condition`*`)` 131 132Verifies that *`condition`* is true. 133 134### EXPECT_FALSE {#EXPECT_FALSE} 135 136`EXPECT_FALSE(`*`condition`*`)` \ 137`ASSERT_FALSE(`*`condition`*`)` 138 139Verifies that *`condition`* is false. 140 141## Binary Comparison {#binary-comparison} 142 143The following assertions compare two values. The value arguments must be 144comparable by the assertion's comparison operator, otherwise a compiler error 145will result. 146 147If an argument supports the `<<` operator, it will be called to print the 148argument when the assertion fails. Otherwise, GoogleTest will attempt to print 149them in the best way it can—see 150[Teaching GoogleTest How to Print Your Values](../advanced.md#teaching-googletest-how-to-print-your-values). 151 152Arguments are always evaluated exactly once, so it's OK for the arguments to 153have side effects. However, the argument evaluation order is undefined and 154programs should not depend on any particular argument evaluation order. 155 156These assertions work with both narrow and wide string objects (`string` and 157`wstring`). 158 159See also the [Floating-Point Comparison](#floating-point) assertions to compare 160floating-point numbers and avoid problems caused by rounding. 161 162### EXPECT_EQ {#EXPECT_EQ} 163 164`EXPECT_EQ(`*`val1`*`,`*`val2`*`)` \ 165`ASSERT_EQ(`*`val1`*`,`*`val2`*`)` 166 167Verifies that *`val1`*`==`*`val2`*. 168 169Does pointer equality on pointers. If used on two C strings, it tests if they 170are in the same memory location, not if they have the same value. Use 171[`EXPECT_STREQ`](#EXPECT_STREQ) to compare C strings (e.g. `const char*`) by 172value. 173 174When comparing a pointer to `NULL`, use `EXPECT_EQ(`*`ptr`*`, nullptr)` instead 175of `EXPECT_EQ(`*`ptr`*`, NULL)`. 176 177### EXPECT_NE {#EXPECT_NE} 178 179`EXPECT_NE(`*`val1`*`,`*`val2`*`)` \ 180`ASSERT_NE(`*`val1`*`,`*`val2`*`)` 181 182Verifies that *`val1`*`!=`*`val2`*. 183 184Does pointer equality on pointers. If used on two C strings, it tests if they 185are in different memory locations, not if they have different values. Use 186[`EXPECT_STRNE`](#EXPECT_STRNE) to compare C strings (e.g. `const char*`) by 187value. 188 189When comparing a pointer to `NULL`, use `EXPECT_NE(`*`ptr`*`, nullptr)` instead 190of `EXPECT_NE(`*`ptr`*`, NULL)`. 191 192### EXPECT_LT {#EXPECT_LT} 193 194`EXPECT_LT(`*`val1`*`,`*`val2`*`)` \ 195`ASSERT_LT(`*`val1`*`,`*`val2`*`)` 196 197Verifies that *`val1`*`<`*`val2`*. 198 199### EXPECT_LE {#EXPECT_LE} 200 201`EXPECT_LE(`*`val1`*`,`*`val2`*`)` \ 202`ASSERT_LE(`*`val1`*`,`*`val2`*`)` 203 204Verifies that *`val1`*`<=`*`val2`*. 205 206### EXPECT_GT {#EXPECT_GT} 207 208`EXPECT_GT(`*`val1`*`,`*`val2`*`)` \ 209`ASSERT_GT(`*`val1`*`,`*`val2`*`)` 210 211Verifies that *`val1`*`>`*`val2`*. 212 213### EXPECT_GE {#EXPECT_GE} 214 215`EXPECT_GE(`*`val1`*`,`*`val2`*`)` \ 216`ASSERT_GE(`*`val1`*`,`*`val2`*`)` 217 218Verifies that *`val1`*`>=`*`val2`*. 219 220## String Comparison {#c-strings} 221 222The following assertions compare two **C strings**. To compare two `string` 223objects, use [`EXPECT_EQ`](#EXPECT_EQ) or [`EXPECT_NE`](#EXPECT_NE) instead. 224 225These assertions also accept wide C strings (`wchar_t*`). If a comparison of two 226wide strings fails, their values will be printed as UTF-8 narrow strings. 227 228To compare a C string with `NULL`, use `EXPECT_EQ(`*`c_string`*`, nullptr)` or 229`EXPECT_NE(`*`c_string`*`, nullptr)`. 230 231### EXPECT_STREQ {#EXPECT_STREQ} 232 233`EXPECT_STREQ(`*`str1`*`,`*`str2`*`)` \ 234`ASSERT_STREQ(`*`str1`*`,`*`str2`*`)` 235 236Verifies that the two C strings *`str1`* and *`str2`* have the same contents. 237 238### EXPECT_STRNE {#EXPECT_STRNE} 239 240`EXPECT_STRNE(`*`str1`*`,`*`str2`*`)` \ 241`ASSERT_STRNE(`*`str1`*`,`*`str2`*`)` 242 243Verifies that the two C strings *`str1`* and *`str2`* have different contents. 244 245### EXPECT_STRCASEEQ {#EXPECT_STRCASEEQ} 246 247`EXPECT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` \ 248`ASSERT_STRCASEEQ(`*`str1`*`,`*`str2`*`)` 249 250Verifies that the two C strings *`str1`* and *`str2`* have the same contents, 251ignoring case. 252 253### EXPECT_STRCASENE {#EXPECT_STRCASENE} 254 255`EXPECT_STRCASENE(`*`str1`*`,`*`str2`*`)` \ 256`ASSERT_STRCASENE(`*`str1`*`,`*`str2`*`)` 257 258Verifies that the two C strings *`str1`* and *`str2`* have different contents, 259ignoring case. 260 261## Floating-Point Comparison {#floating-point} 262 263The following assertions compare two floating-point values. 264 265Due to rounding errors, it is very unlikely that two floating-point values will 266match exactly, so `EXPECT_EQ` is not suitable. In general, for floating-point 267comparison to make sense, the user needs to carefully choose the error bound. 268 269GoogleTest also provides assertions that use a default error bound based on 270Units in the Last Place (ULPs). To learn more about ULPs, see the article 271[Comparing Floating Point Numbers](https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/). 272 273### EXPECT_FLOAT_EQ {#EXPECT_FLOAT_EQ} 274 275`EXPECT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` \ 276`ASSERT_FLOAT_EQ(`*`val1`*`,`*`val2`*`)` 277 278Verifies that the two `float` values *`val1`* and *`val2`* are approximately 279equal, to within 4 ULPs from each other. 280 281### EXPECT_DOUBLE_EQ {#EXPECT_DOUBLE_EQ} 282 283`EXPECT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` \ 284`ASSERT_DOUBLE_EQ(`*`val1`*`,`*`val2`*`)` 285 286Verifies that the two `double` values *`val1`* and *`val2`* are approximately 287equal, to within 4 ULPs from each other. 288 289### EXPECT_NEAR {#EXPECT_NEAR} 290 291`EXPECT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` \ 292`ASSERT_NEAR(`*`val1`*`,`*`val2`*`,`*`abs_error`*`)` 293 294Verifies that the difference between *`val1`* and *`val2`* does not exceed the 295absolute error bound *`abs_error`*. 296 297## Exception Assertions {#exceptions} 298 299The following assertions verify that a piece of code throws, or does not throw, 300an exception. Usage requires exceptions to be enabled in the build environment. 301 302Note that the piece of code under test can be a compound statement, for example: 303 304```cpp 305EXPECT_NO_THROW({ 306 int n = 5; 307 DoSomething(&n); 308}); 309``` 310 311### EXPECT_THROW {#EXPECT_THROW} 312 313`EXPECT_THROW(`*`statement`*`,`*`exception_type`*`)` \ 314`ASSERT_THROW(`*`statement`*`,`*`exception_type`*`)` 315 316Verifies that *`statement`* throws an exception of type *`exception_type`*. 317 318### EXPECT_ANY_THROW {#EXPECT_ANY_THROW} 319 320`EXPECT_ANY_THROW(`*`statement`*`)` \ 321`ASSERT_ANY_THROW(`*`statement`*`)` 322 323Verifies that *`statement`* throws an exception of any type. 324 325### EXPECT_NO_THROW {#EXPECT_NO_THROW} 326 327`EXPECT_NO_THROW(`*`statement`*`)` \ 328`ASSERT_NO_THROW(`*`statement`*`)` 329 330Verifies that *`statement`* does not throw any exception. 331 332## Predicate Assertions {#predicates} 333 334The following assertions enable more complex predicates to be verified while 335printing a more clear failure message than if `EXPECT_TRUE` were used alone. 336 337### EXPECT_PRED* {#EXPECT_PRED} 338 339`EXPECT_PRED1(`*`pred`*`,`*`val1`*`)` \ 340`EXPECT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ 341`EXPECT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ 342`EXPECT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ 343`EXPECT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` 344 345`ASSERT_PRED1(`*`pred`*`,`*`val1`*`)` \ 346`ASSERT_PRED2(`*`pred`*`,`*`val1`*`,`*`val2`*`)` \ 347`ASSERT_PRED3(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ 348`ASSERT_PRED4(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` \ 349`ASSERT_PRED5(`*`pred`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` 350 351Verifies that the predicate *`pred`* returns `true` when passed the given values 352as arguments. 353 354The parameter *`pred`* is a function or functor that accepts as many arguments 355as the corresponding macro accepts values. If *`pred`* returns `true` for the 356given arguments, the assertion succeeds, otherwise the assertion fails. 357 358When the assertion fails, it prints the value of each argument. Arguments are 359always evaluated exactly once. 360 361As an example, see the following code: 362 363```cpp 364// Returns true if m and n have no common divisors except 1. 365bool MutuallyPrime(int m, int n) { ... } 366... 367const int a = 3; 368const int b = 4; 369const int c = 10; 370... 371EXPECT_PRED2(MutuallyPrime, a, b); // Succeeds 372EXPECT_PRED2(MutuallyPrime, b, c); // Fails 373``` 374 375In the above example, the first assertion succeeds, and the second fails with 376the following message: 377 378``` 379MutuallyPrime(b, c) is false, where 380b is 4 381c is 10 382``` 383 384Note that if the given predicate is an overloaded function or a function 385template, the assertion macro might not be able to determine which version to 386use, and it might be necessary to explicitly specify the type of the function. 387For example, for a Boolean function `IsPositive()` overloaded to take either a 388single `int` or `double` argument, it would be necessary to write one of the 389following: 390 391```cpp 392EXPECT_PRED1(static_cast<bool (*)(int)>(IsPositive), 5); 393EXPECT_PRED1(static_cast<bool (*)(double)>(IsPositive), 3.14); 394``` 395 396Writing simply `EXPECT_PRED1(IsPositive, 5);` would result in a compiler error. 397Similarly, to use a template function, specify the template arguments: 398 399```cpp 400template <typename T> 401bool IsNegative(T x) { 402 return x < 0; 403} 404... 405EXPECT_PRED1(IsNegative<int>, -5); // Must specify type for IsNegative 406``` 407 408If a template has multiple parameters, wrap the predicate in parentheses so the 409macro arguments are parsed correctly: 410 411```cpp 412ASSERT_PRED2((MyPredicate<int, int>), 5, 0); 413``` 414 415### EXPECT_PRED_FORMAT* {#EXPECT_PRED_FORMAT} 416 417`EXPECT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ 418`EXPECT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ 419`EXPECT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ 420`EXPECT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` 421\ 422`EXPECT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` 423 424`ASSERT_PRED_FORMAT1(`*`pred_formatter`*`,`*`val1`*`)` \ 425`ASSERT_PRED_FORMAT2(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`)` \ 426`ASSERT_PRED_FORMAT3(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`)` \ 427`ASSERT_PRED_FORMAT4(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`)` 428\ 429`ASSERT_PRED_FORMAT5(`*`pred_formatter`*`,`*`val1`*`,`*`val2`*`,`*`val3`*`,`*`val4`*`,`*`val5`*`)` 430 431Verifies that the predicate *`pred_formatter`* succeeds when passed the given 432values as arguments. 433 434The parameter *`pred_formatter`* is a *predicate-formatter*, which is a function 435or functor with the signature: 436 437```cpp 438testing::AssertionResult PredicateFormatter(const char* expr1, 439 const char* expr2, 440 ... 441 const char* exprn, 442 T1 val1, 443 T2 val2, 444 ... 445 Tn valn); 446``` 447 448where *`val1`*, *`val2`*, ..., *`valn`* are the values of the predicate 449arguments, and *`expr1`*, *`expr2`*, ..., *`exprn`* are the corresponding 450expressions as they appear in the source code. The types `T1`, `T2`, ..., `Tn` 451can be either value types or reference types; if an argument has type `T`, it 452can be declared as either `T` or `const T&`, whichever is appropriate. For more 453about the return type `testing::AssertionResult`, see 454[Using a Function That Returns an AssertionResult](../advanced.md#using-a-function-that-returns-an-assertionresult). 455 456As an example, see the following code: 457 458```cpp 459// Returns the smallest prime common divisor of m and n, 460// or 1 when m and n are mutually prime. 461int SmallestPrimeCommonDivisor(int m, int n) { ... } 462 463// Returns true if m and n have no common divisors except 1. 464bool MutuallyPrime(int m, int n) { ... } 465 466// A predicate-formatter for asserting that two integers are mutually prime. 467testing::AssertionResult AssertMutuallyPrime(const char* m_expr, 468 const char* n_expr, 469 int m, 470 int n) { 471 if (MutuallyPrime(m, n)) return testing::AssertionSuccess(); 472 473 return testing::AssertionFailure() << m_expr << " and " << n_expr 474 << " (" << m << " and " << n << ") are not mutually prime, " 475 << "as they have a common divisor " << SmallestPrimeCommonDivisor(m, n); 476} 477 478... 479const int a = 3; 480const int b = 4; 481const int c = 10; 482... 483EXPECT_PRED_FORMAT2(AssertMutuallyPrime, a, b); // Succeeds 484EXPECT_PRED_FORMAT2(AssertMutuallyPrime, b, c); // Fails 485``` 486 487In the above example, the final assertion fails and the predicate-formatter 488produces the following failure message: 489 490``` 491b and c (4 and 10) are not mutually prime, as they have a common divisor 2 492``` 493 494## Windows HRESULT Assertions {#HRESULT} 495 496The following assertions test for `HRESULT` success or failure. For example: 497 498```cpp 499CComPtr<IShellDispatch2> shell; 500ASSERT_HRESULT_SUCCEEDED(shell.CoCreateInstance(L"Shell.Application")); 501CComVariant empty; 502ASSERT_HRESULT_SUCCEEDED(shell->ShellExecute(CComBSTR(url), empty, empty, empty, empty)); 503``` 504 505The generated output contains the human-readable error message associated with 506the returned `HRESULT` code. 507 508### EXPECT_HRESULT_SUCCEEDED {#EXPECT_HRESULT_SUCCEEDED} 509 510`EXPECT_HRESULT_SUCCEEDED(`*`expression`*`)` \ 511`ASSERT_HRESULT_SUCCEEDED(`*`expression`*`)` 512 513Verifies that *`expression`* is a success `HRESULT`. 514 515### EXPECT_HRESULT_FAILED {#EXPECT_HRESULT_FAILED} 516 517`EXPECT_HRESULT_FAILED(`*`expression`*`)` \ 518`ASSERT_HRESULT_FAILED(`*`expression`*`)` 519 520Verifies that *`expression`* is a failure `HRESULT`. 521 522## Death Assertions {#death} 523 524The following assertions verify that a piece of code causes the process to 525terminate. For context, see [Death Tests](../advanced.md#death-tests). 526 527These assertions spawn a new process and execute the code under test in that 528process. How that happens depends on the platform and the variable 529`::testing::GTEST_FLAG(death_test_style)`, which is initialized from the 530command-line flag `--gtest_death_test_style`. 531 532* On POSIX systems, `fork()` (or `clone()` on Linux) is used to spawn the 533 child, after which: 534 * If the variable's value is `"fast"`, the death test statement is 535 immediately executed. 536 * If the variable's value is `"threadsafe"`, the child process re-executes 537 the unit test binary just as it was originally invoked, but with some 538 extra flags to cause just the single death test under consideration to 539 be run. 540* On Windows, the child is spawned using the `CreateProcess()` API, and 541 re-executes the binary to cause just the single death test under 542 consideration to be run - much like the `"threadsafe"` mode on POSIX. 543 544Other values for the variable are illegal and will cause the death test to fail. 545Currently, the flag's default value is 546**`"fast"`**. 547 548If the death test statement runs to completion without dying, the child process 549will nonetheless terminate, and the assertion fails. 550 551Note that the piece of code under test can be a compound statement, for example: 552 553```cpp 554EXPECT_DEATH({ 555 int n = 5; 556 DoSomething(&n); 557}, "Error on line .* of DoSomething()"); 558``` 559 560### EXPECT_DEATH {#EXPECT_DEATH} 561 562`EXPECT_DEATH(`*`statement`*`,`*`matcher`*`)` \ 563`ASSERT_DEATH(`*`statement`*`,`*`matcher`*`)` 564 565Verifies that *`statement`* causes the process to terminate with a nonzero exit 566status and produces `stderr` output that matches *`matcher`*. 567 568The parameter *`matcher`* is either a [matcher](matchers.md) for a `const 569std::string&`, or a regular expression (see 570[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare 571string *`s`* (with no matcher) is treated as 572[`ContainsRegex(s)`](matchers.md#string-matchers), **not** 573[`Eq(s)`](matchers.md#generic-comparison). 574 575For example, the following code verifies that calling `DoSomething(42)` causes 576the process to die with an error message that contains the text `My error`: 577 578```cpp 579EXPECT_DEATH(DoSomething(42), "My error"); 580``` 581 582### EXPECT_DEATH_IF_SUPPORTED {#EXPECT_DEATH_IF_SUPPORTED} 583 584`EXPECT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` \ 585`ASSERT_DEATH_IF_SUPPORTED(`*`statement`*`,`*`matcher`*`)` 586 587If death tests are supported, behaves the same as 588[`EXPECT_DEATH`](#EXPECT_DEATH). Otherwise, verifies nothing. 589 590### EXPECT_DEBUG_DEATH {#EXPECT_DEBUG_DEATH} 591 592`EXPECT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` \ 593`ASSERT_DEBUG_DEATH(`*`statement`*`,`*`matcher`*`)` 594 595In debug mode, behaves the same as [`EXPECT_DEATH`](#EXPECT_DEATH). When not in 596debug mode (i.e. `NDEBUG` is defined), just executes *`statement`*. 597 598### EXPECT_EXIT {#EXPECT_EXIT} 599 600`EXPECT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` \ 601`ASSERT_EXIT(`*`statement`*`,`*`predicate`*`,`*`matcher`*`)` 602 603Verifies that *`statement`* causes the process to terminate with an exit status 604that satisfies *`predicate`*, and produces `stderr` output that matches 605*`matcher`*. 606 607The parameter *`predicate`* is a function or functor that accepts an `int` exit 608status and returns a `bool`. GoogleTest provides two predicates to handle common 609cases: 610 611```cpp 612// Returns true if the program exited normally with the given exit status code. 613::testing::ExitedWithCode(exit_code); 614 615// Returns true if the program was killed by the given signal. 616// Not available on Windows. 617::testing::KilledBySignal(signal_number); 618``` 619 620The parameter *`matcher`* is either a [matcher](matchers.md) for a `const 621std::string&`, or a regular expression (see 622[Regular Expression Syntax](../advanced.md#regular-expression-syntax))—a bare 623string *`s`* (with no matcher) is treated as 624[`ContainsRegex(s)`](matchers.md#string-matchers), **not** 625[`Eq(s)`](matchers.md#generic-comparison). 626 627For example, the following code verifies that calling `NormalExit()` causes the 628process to print a message containing the text `Success` to `stderr` and exit 629with exit status code 0: 630 631```cpp 632EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success"); 633``` 634