1# Mocking Reference 2 3This page lists the facilities provided by GoogleTest for creating and working 4with mock objects. To use them, include the header 5`gmock/gmock.h`. 6 7## Macros {#macros} 8 9GoogleTest defines the following macros for working with mocks. 10 11### MOCK_METHOD {#MOCK_METHOD} 12 13`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`));` \ 14`MOCK_METHOD(`*`return_type`*`,`*`method_name`*`, (`*`args...`*`), 15(`*`specs...`*`));` 16 17Defines a mock method *`method_name`* with arguments `(`*`args...`*`)` and 18return type *`return_type`* within a mock class. 19 20The parameters of `MOCK_METHOD` mirror the method declaration. The optional 21fourth parameter *`specs...`* is a comma-separated list of qualifiers. The 22following qualifiers are accepted: 23 24| Qualifier | Meaning | 25| -------------------------- | -------------------------------------------- | 26| `const` | Makes the mocked method a `const` method. Required if overriding a `const` method. | 27| `override` | Marks the method with `override`. Recommended if overriding a `virtual` method. | 28| `noexcept` | Marks the method with `noexcept`. Required if overriding a `noexcept` method. | 29| `Calltype(`*`calltype`*`)` | Sets the call type for the method, for example `Calltype(STDMETHODCALLTYPE)`. Useful on Windows. | 30| `ref(`*`qualifier`*`)` | Marks the method with the given reference qualifier, for example `ref(&)` or `ref(&&)`. Required if overriding a method that has a reference qualifier. | 31 32Note that commas in arguments prevent `MOCK_METHOD` from parsing the arguments 33correctly if they are not appropriately surrounded by parentheses. See the 34following example: 35 36```cpp 37class MyMock { 38 public: 39 // The following 2 lines will not compile due to commas in the arguments: 40 MOCK_METHOD(std::pair<bool, int>, GetPair, ()); // Error! 41 MOCK_METHOD(bool, CheckMap, (std::map<int, double>, bool)); // Error! 42 43 // One solution - wrap arguments that contain commas in parentheses: 44 MOCK_METHOD((std::pair<bool, int>), GetPair, ()); 45 MOCK_METHOD(bool, CheckMap, ((std::map<int, double>), bool)); 46 47 // Another solution - use type aliases: 48 using BoolAndInt = std::pair<bool, int>; 49 MOCK_METHOD(BoolAndInt, GetPair, ()); 50 using MapIntDouble = std::map<int, double>; 51 MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); 52}; 53``` 54 55`MOCK_METHOD` must be used in the `public:` section of a mock class definition, 56regardless of whether the method being mocked is `public`, `protected`, or 57`private` in the base class. 58 59### EXPECT_CALL {#EXPECT_CALL} 60 61`EXPECT_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` 62 63Creates an [expectation](../gmock_for_dummies.md#setting-expectations) that the 64method *`method_name`* of the object *`mock_object`* is called with arguments 65that match the given matchers *`matchers...`*. `EXPECT_CALL` must precede any 66code that exercises the mock object. 67 68The parameter *`matchers...`* is a comma-separated list of 69[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that 70correspond to each argument of the method *`method_name`*. The expectation will 71apply only to calls of *`method_name`* whose arguments match all of the 72matchers. If `(`*`matchers...`*`)` is omitted, the expectation behaves as if 73each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). 74See the [Matchers Reference](matchers.md) for a list of all built-in matchers. 75 76The following chainable clauses can be used to modify the expectation, and they 77must be used in the following order: 78 79```cpp 80EXPECT_CALL(mock_object, method_name(matchers...)) 81 .With(multi_argument_matcher) // Can be used at most once 82 .Times(cardinality) // Can be used at most once 83 .InSequence(sequences...) // Can be used any number of times 84 .After(expectations...) // Can be used any number of times 85 .WillOnce(action) // Can be used any number of times 86 .WillRepeatedly(action) // Can be used at most once 87 .RetiresOnSaturation(); // Can be used at most once 88``` 89 90See details for each modifier clause below. 91 92#### With {#EXPECT_CALL.With} 93 94`.With(`*`multi_argument_matcher`*`)` 95 96Restricts the expectation to apply only to mock function calls whose arguments 97as a whole match the multi-argument matcher *`multi_argument_matcher`*. 98 99GoogleTest passes all of the arguments as one tuple into the matcher. The 100parameter *`multi_argument_matcher`* must thus be a matcher of type 101`Matcher<std::tuple<A1, ..., An>>`, where `A1, ..., An` are the types of the 102function arguments. 103 104For example, the following code sets the expectation that 105`my_mock.SetPosition()` is called with any two arguments, the first argument 106being less than the second: 107 108```cpp 109using ::testing::_; 110using ::testing::Lt; 111... 112EXPECT_CALL(my_mock, SetPosition(_, _)) 113 .With(Lt()); 114``` 115 116GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` 117matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). 118 119The `With` clause can be used at most once on an expectation and must be the 120first clause. 121 122#### Times {#EXPECT_CALL.Times} 123 124`.Times(`*`cardinality`*`)` 125 126Specifies how many times the mock function call is expected. 127 128The parameter *`cardinality`* represents the number of expected calls and can be 129one of the following, all defined in the `::testing` namespace: 130 131| Cardinality | Meaning | 132| ------------------- | --------------------------------------------------- | 133| `AnyNumber()` | The function can be called any number of times. | 134| `AtLeast(n)` | The function call is expected at least *n* times. | 135| `AtMost(n)` | The function call is expected at most *n* times. | 136| `Between(m, n)` | The function call is expected between *m* and *n* times, inclusive. | 137| `Exactly(n)` or `n` | The function call is expected exactly *n* times. If *n* is 0, the call should never happen. | 138 139If the `Times` clause is omitted, GoogleTest infers the cardinality as follows: 140 141* If neither [`WillOnce`](#EXPECT_CALL.WillOnce) nor 142 [`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) are specified, the inferred 143 cardinality is `Times(1)`. 144* If there are *n* `WillOnce` clauses and no `WillRepeatedly` clause, where 145 *n* >= 1, the inferred cardinality is `Times(n)`. 146* If there are *n* `WillOnce` clauses and one `WillRepeatedly` clause, where 147 *n* >= 0, the inferred cardinality is `Times(AtLeast(n))`. 148 149The `Times` clause can be used at most once on an expectation. 150 151#### InSequence {#EXPECT_CALL.InSequence} 152 153`.InSequence(`*`sequences...`*`)` 154 155Specifies that the mock function call is expected in a certain sequence. 156 157The parameter *`sequences...`* is any number of [`Sequence`](#Sequence) objects. 158Expected calls assigned to the same sequence are expected to occur in the order 159the expectations are declared. 160 161For example, the following code sets the expectation that the `Reset()` method 162of `my_mock` is called before both `GetSize()` and `Describe()`, and `GetSize()` 163and `Describe()` can occur in any order relative to each other: 164 165```cpp 166using ::testing::Sequence; 167Sequence s1, s2; 168... 169EXPECT_CALL(my_mock, Reset()) 170 .InSequence(s1, s2); 171EXPECT_CALL(my_mock, GetSize()) 172 .InSequence(s1); 173EXPECT_CALL(my_mock, Describe()) 174 .InSequence(s2); 175``` 176 177The `InSequence` clause can be used any number of times on an expectation. 178 179See also the [`InSequence` class](#InSequence). 180 181#### After {#EXPECT_CALL.After} 182 183`.After(`*`expectations...`*`)` 184 185Specifies that the mock function call is expected to occur after one or more 186other calls. 187 188The parameter *`expectations...`* can be up to five 189[`Expectation`](#Expectation) or [`ExpectationSet`](#ExpectationSet) objects. 190The mock function call is expected to occur after all of the given expectations. 191 192For example, the following code sets the expectation that the `Describe()` 193method of `my_mock` is called only after both `InitX()` and `InitY()` have been 194called. 195 196```cpp 197using ::testing::Expectation; 198... 199Expectation init_x = EXPECT_CALL(my_mock, InitX()); 200Expectation init_y = EXPECT_CALL(my_mock, InitY()); 201EXPECT_CALL(my_mock, Describe()) 202 .After(init_x, init_y); 203``` 204 205The `ExpectationSet` object is helpful when the number of prerequisites for an 206expectation is large or variable, for example: 207 208```cpp 209using ::testing::ExpectationSet; 210... 211ExpectationSet all_inits; 212// Collect all expectations of InitElement() calls 213for (int i = 0; i < element_count; i++) { 214 all_inits += EXPECT_CALL(my_mock, InitElement(i)); 215} 216EXPECT_CALL(my_mock, Describe()) 217 .After(all_inits); // Expect Describe() call after all InitElement() calls 218``` 219 220The `After` clause can be used any number of times on an expectation. 221 222#### WillOnce {#EXPECT_CALL.WillOnce} 223 224`.WillOnce(`*`action`*`)` 225 226Specifies the mock function's actual behavior when invoked, for a single 227matching function call. 228 229The parameter *`action`* represents the 230[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function 231call will perform. See the [Actions Reference](actions.md) for a list of 232built-in actions. 233 234The use of `WillOnce` implicitly sets a cardinality on the expectation when 235`Times` is not specified. See [`Times`](#EXPECT_CALL.Times). 236 237Each matching function call will perform the next action in the order declared. 238For example, the following code specifies that `my_mock.GetNumber()` is expected 239to be called exactly 3 times and will return `1`, `2`, and `3` respectively on 240the first, second, and third calls: 241 242```cpp 243using ::testing::Return; 244... 245EXPECT_CALL(my_mock, GetNumber()) 246 .WillOnce(Return(1)) 247 .WillOnce(Return(2)) 248 .WillOnce(Return(3)); 249``` 250 251The `WillOnce` clause can be used any number of times on an expectation. 252 253#### WillRepeatedly {#EXPECT_CALL.WillRepeatedly} 254 255`.WillRepeatedly(`*`action`*`)` 256 257Specifies the mock function's actual behavior when invoked, for all subsequent 258matching function calls. Takes effect after the actions specified in the 259[`WillOnce`](#EXPECT_CALL.WillOnce) clauses, if any, have been performed. 260 261The parameter *`action`* represents the 262[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function 263call will perform. See the [Actions Reference](actions.md) for a list of 264built-in actions. 265 266The use of `WillRepeatedly` implicitly sets a cardinality on the expectation 267when `Times` is not specified. See [`Times`](#EXPECT_CALL.Times). 268 269If any `WillOnce` clauses have been specified, matching function calls will 270perform those actions before the action specified by `WillRepeatedly`. See the 271following example: 272 273```cpp 274using ::testing::Return; 275... 276EXPECT_CALL(my_mock, GetName()) 277 .WillRepeatedly(Return("John Doe")); // Return "John Doe" on all calls 278 279EXPECT_CALL(my_mock, GetNumber()) 280 .WillOnce(Return(42)) // Return 42 on the first call 281 .WillRepeatedly(Return(7)); // Return 7 on all subsequent calls 282``` 283 284The `WillRepeatedly` clause can be used at most once on an expectation. 285 286#### RetiresOnSaturation {#EXPECT_CALL.RetiresOnSaturation} 287 288`.RetiresOnSaturation()` 289 290Indicates that the expectation will no longer be active after the expected 291number of matching function calls has been reached. 292 293The `RetiresOnSaturation` clause is only meaningful for expectations with an 294upper-bounded cardinality. The expectation will *retire* (no longer match any 295function calls) after it has been *saturated* (the upper bound has been 296reached). See the following example: 297 298```cpp 299using ::testing::_; 300using ::testing::AnyNumber; 301... 302EXPECT_CALL(my_mock, SetNumber(_)) // Expectation 1 303 .Times(AnyNumber()); 304EXPECT_CALL(my_mock, SetNumber(7)) // Expectation 2 305 .Times(2) 306 .RetiresOnSaturation(); 307``` 308 309In the above example, the first two calls to `my_mock.SetNumber(7)` match 310expectation 2, which then becomes inactive and no longer matches any calls. A 311third call to `my_mock.SetNumber(7)` would then match expectation 1. Without 312`RetiresOnSaturation()` on expectation 2, a third call to `my_mock.SetNumber(7)` 313would match expectation 2 again, producing a failure since the limit of 2 calls 314was exceeded. 315 316The `RetiresOnSaturation` clause can be used at most once on an expectation and 317must be the last clause. 318 319### ON_CALL {#ON_CALL} 320 321`ON_CALL(`*`mock_object`*`,`*`method_name`*`(`*`matchers...`*`))` 322 323Defines what happens when the method *`method_name`* of the object 324*`mock_object`* is called with arguments that match the given matchers 325*`matchers...`*. Requires a modifier clause to specify the method's behavior. 326*Does not* set any expectations that the method will be called. 327 328The parameter *`matchers...`* is a comma-separated list of 329[matchers](../gmock_for_dummies.md#matchers-what-arguments-do-we-expect) that 330correspond to each argument of the method *`method_name`*. The `ON_CALL` 331specification will apply only to calls of *`method_name`* whose arguments match 332all of the matchers. If `(`*`matchers...`*`)` is omitted, the behavior is as if 333each argument's matcher were a [wildcard matcher (`_`)](matchers.md#wildcard). 334See the [Matchers Reference](matchers.md) for a list of all built-in matchers. 335 336The following chainable clauses can be used to set the method's behavior, and 337they must be used in the following order: 338 339```cpp 340ON_CALL(mock_object, method_name(matchers...)) 341 .With(multi_argument_matcher) // Can be used at most once 342 .WillByDefault(action); // Required 343``` 344 345See details for each modifier clause below. 346 347#### With {#ON_CALL.With} 348 349`.With(`*`multi_argument_matcher`*`)` 350 351Restricts the specification to only mock function calls whose arguments as a 352whole match the multi-argument matcher *`multi_argument_matcher`*. 353 354GoogleTest passes all of the arguments as one tuple into the matcher. The 355parameter *`multi_argument_matcher`* must thus be a matcher of type 356`Matcher<std::tuple<A1, ..., An>>`, where `A1, ..., An` are the types of the 357function arguments. 358 359For example, the following code sets the default behavior when 360`my_mock.SetPosition()` is called with any two arguments, the first argument 361being less than the second: 362 363```cpp 364using ::testing::_; 365using ::testing::Lt; 366using ::testing::Return; 367... 368ON_CALL(my_mock, SetPosition(_, _)) 369 .With(Lt()) 370 .WillByDefault(Return(true)); 371``` 372 373GoogleTest provides some built-in matchers for 2-tuples, including the `Lt()` 374matcher above. See [Multi-argument Matchers](matchers.md#MultiArgMatchers). 375 376The `With` clause can be used at most once with each `ON_CALL` statement. 377 378#### WillByDefault {#ON_CALL.WillByDefault} 379 380`.WillByDefault(`*`action`*`)` 381 382Specifies the default behavior of a matching mock function call. 383 384The parameter *`action`* represents the 385[action](../gmock_for_dummies.md#actions-what-should-it-do) that the function 386call will perform. See the [Actions Reference](actions.md) for a list of 387built-in actions. 388 389For example, the following code specifies that by default, a call to 390`my_mock.Greet()` will return `"hello"`: 391 392```cpp 393using ::testing::Return; 394... 395ON_CALL(my_mock, Greet()) 396 .WillByDefault(Return("hello")); 397``` 398 399The action specified by `WillByDefault` is superseded by the actions specified 400on a matching `EXPECT_CALL` statement, if any. See the 401[`WillOnce`](#EXPECT_CALL.WillOnce) and 402[`WillRepeatedly`](#EXPECT_CALL.WillRepeatedly) clauses of `EXPECT_CALL`. 403 404The `WillByDefault` clause must be used exactly once with each `ON_CALL` 405statement. 406 407## Classes {#classes} 408 409GoogleTest defines the following classes for working with mocks. 410 411### DefaultValue {#DefaultValue} 412 413`::testing::DefaultValue<T>` 414 415Allows a user to specify the default value for a type `T` that is both copyable 416and publicly destructible (i.e. anything that can be used as a function return 417type). For mock functions with a return type of `T`, this default value is 418returned from function calls that do not specify an action. 419 420Provides the static methods `Set()`, `SetFactory()`, and `Clear()` to manage the 421default value: 422 423```cpp 424// Sets the default value to be returned. T must be copy constructible. 425DefaultValue<T>::Set(value); 426 427// Sets a factory. Will be invoked on demand. T must be move constructible. 428T MakeT(); 429DefaultValue<T>::SetFactory(&MakeT); 430 431// Unsets the default value. 432DefaultValue<T>::Clear(); 433``` 434 435### NiceMock {#NiceMock} 436 437`::testing::NiceMock<T>` 438 439Represents a mock object that suppresses warnings on 440[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The 441template parameter `T` is any mock class, except for another `NiceMock`, 442`NaggyMock`, or `StrictMock`. 443 444Usage of `NiceMock<T>` is analogous to usage of `T`. `NiceMock<T>` is a subclass 445of `T`, so it can be used wherever an object of type `T` is accepted. In 446addition, `NiceMock<T>` can be constructed with any arguments that a constructor 447of `T` accepts. 448 449For example, the following code suppresses warnings on the mock `my_mock` of 450type `MockClass` if a method other than `DoSomething()` is called: 451 452```cpp 453using ::testing::NiceMock; 454... 455NiceMock<MockClass> my_mock("some", "args"); 456EXPECT_CALL(my_mock, DoSomething()); 457... code that uses my_mock ... 458``` 459 460`NiceMock<T>` only works for mock methods defined using the `MOCK_METHOD` macro 461directly in the definition of class `T`. If a mock method is defined in a base 462class of `T`, a warning might still be generated. 463 464`NiceMock<T>` might not work correctly if the destructor of `T` is not virtual. 465 466### NaggyMock {#NaggyMock} 467 468`::testing::NaggyMock<T>` 469 470Represents a mock object that generates warnings on 471[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The 472template parameter `T` is any mock class, except for another `NiceMock`, 473`NaggyMock`, or `StrictMock`. 474 475Usage of `NaggyMock<T>` is analogous to usage of `T`. `NaggyMock<T>` is a 476subclass of `T`, so it can be used wherever an object of type `T` is accepted. 477In addition, `NaggyMock<T>` can be constructed with any arguments that a 478constructor of `T` accepts. 479 480For example, the following code generates warnings on the mock `my_mock` of type 481`MockClass` if a method other than `DoSomething()` is called: 482 483```cpp 484using ::testing::NaggyMock; 485... 486NaggyMock<MockClass> my_mock("some", "args"); 487EXPECT_CALL(my_mock, DoSomething()); 488... code that uses my_mock ... 489``` 490 491Mock objects of type `T` by default behave the same way as `NaggyMock<T>`. 492 493### StrictMock {#StrictMock} 494 495`::testing::StrictMock<T>` 496 497Represents a mock object that generates test failures on 498[uninteresting calls](../gmock_cook_book.md#uninteresting-vs-unexpected). The 499template parameter `T` is any mock class, except for another `NiceMock`, 500`NaggyMock`, or `StrictMock`. 501 502Usage of `StrictMock<T>` is analogous to usage of `T`. `StrictMock<T>` is a 503subclass of `T`, so it can be used wherever an object of type `T` is accepted. 504In addition, `StrictMock<T>` can be constructed with any arguments that a 505constructor of `T` accepts. 506 507For example, the following code generates a test failure on the mock `my_mock` 508of type `MockClass` if a method other than `DoSomething()` is called: 509 510```cpp 511using ::testing::StrictMock; 512... 513StrictMock<MockClass> my_mock("some", "args"); 514EXPECT_CALL(my_mock, DoSomething()); 515... code that uses my_mock ... 516``` 517 518`StrictMock<T>` only works for mock methods defined using the `MOCK_METHOD` 519macro directly in the definition of class `T`. If a mock method is defined in a 520base class of `T`, a failure might not be generated. 521 522`StrictMock<T>` might not work correctly if the destructor of `T` is not 523virtual. 524 525### Sequence {#Sequence} 526 527`::testing::Sequence` 528 529Represents a chronological sequence of expectations. See the 530[`InSequence`](#EXPECT_CALL.InSequence) clause of `EXPECT_CALL` for usage. 531 532### InSequence {#InSequence} 533 534`::testing::InSequence` 535 536An object of this type causes all expectations encountered in its scope to be 537put in an anonymous sequence. 538 539This allows more convenient expression of multiple expectations in a single 540sequence: 541 542```cpp 543using ::testing::InSequence; 544{ 545 InSequence seq; 546 547 // The following are expected to occur in the order declared. 548 EXPECT_CALL(...); 549 EXPECT_CALL(...); 550 ... 551 EXPECT_CALL(...); 552} 553``` 554 555The name of the `InSequence` object does not matter. 556 557### Expectation {#Expectation} 558 559`::testing::Expectation` 560 561Represents a mock function call expectation as created by 562[`EXPECT_CALL`](#EXPECT_CALL): 563 564```cpp 565using ::testing::Expectation; 566Expectation my_expectation = EXPECT_CALL(...); 567``` 568 569Useful for specifying sequences of expectations; see the 570[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. 571 572### ExpectationSet {#ExpectationSet} 573 574`::testing::ExpectationSet` 575 576Represents a set of mock function call expectations. 577 578Use the `+=` operator to add [`Expectation`](#Expectation) objects to the set: 579 580```cpp 581using ::testing::ExpectationSet; 582ExpectationSet my_expectations; 583my_expectations += EXPECT_CALL(...); 584``` 585 586Useful for specifying sequences of expectations; see the 587[`After`](#EXPECT_CALL.After) clause of `EXPECT_CALL`. 588