1# gMock Cookbook 2 3You can find recipes for using gMock here. If you haven't yet, please read 4[the dummy guide](gmock_for_dummies.md) first to make sure you understand the 5basics. 6 7{: .callout .note} 8**Note:** gMock lives in the `testing` name space. For readability, it is 9recommended to write `using ::testing::Foo;` once in your file before using the 10name `Foo` defined by gMock. We omit such `using` statements in this section for 11brevity, but you should do it in your own code. 12 13## Creating Mock Classes 14 15Mock classes are defined as normal classes, using the `MOCK_METHOD` macro to 16generate mocked methods. The macro gets 3 or 4 parameters: 17 18```cpp 19class MyMock { 20 public: 21 MOCK_METHOD(ReturnType, MethodName, (Args...)); 22 MOCK_METHOD(ReturnType, MethodName, (Args...), (Specs...)); 23}; 24``` 25 26The first 3 parameters are simply the method declaration, split into 3 parts. 27The 4th parameter accepts a closed list of qualifiers, which affect the 28generated method: 29 30* **`const`** - Makes the mocked method a `const` method. Required if 31 overriding a `const` method. 32* **`override`** - Marks the method with `override`. Recommended if overriding 33 a `virtual` method. 34* **`noexcept`** - Marks the method with `noexcept`. Required if overriding a 35 `noexcept` method. 36* **`Calltype(...)`** - Sets the call type for the method (e.g. to 37 `STDMETHODCALLTYPE`), useful in Windows. 38* **`ref(...)`** - Marks the method with the reference qualification 39 specified. Required if overriding a method that has reference 40 qualifications. Eg `ref(&)` or `ref(&&)`. 41 42### Dealing with unprotected commas 43 44Unprotected commas, i.e. commas which are not surrounded by parentheses, prevent 45`MOCK_METHOD` from parsing its arguments correctly: 46 47{: .bad} 48```cpp 49class MockFoo { 50 public: 51 MOCK_METHOD(std::pair<bool, int>, GetPair, ()); // Won't compile! 52 MOCK_METHOD(bool, CheckMap, (std::map<int, double>, bool)); // Won't compile! 53}; 54``` 55 56Solution 1 - wrap with parentheses: 57 58{: .good} 59```cpp 60class MockFoo { 61 public: 62 MOCK_METHOD((std::pair<bool, int>), GetPair, ()); 63 MOCK_METHOD(bool, CheckMap, ((std::map<int, double>), bool)); 64}; 65``` 66 67Note that wrapping a return or argument type with parentheses is, in general, 68invalid C++. `MOCK_METHOD` removes the parentheses. 69 70Solution 2 - define an alias: 71 72{: .good} 73```cpp 74class MockFoo { 75 public: 76 using BoolAndInt = std::pair<bool, int>; 77 MOCK_METHOD(BoolAndInt, GetPair, ()); 78 using MapIntDouble = std::map<int, double>; 79 MOCK_METHOD(bool, CheckMap, (MapIntDouble, bool)); 80}; 81``` 82 83### Mocking Private or Protected Methods 84 85You must always put a mock method definition (`MOCK_METHOD`) in a `public:` 86section of the mock class, regardless of the method being mocked being `public`, 87`protected`, or `private` in the base class. This allows `ON_CALL` and 88`EXPECT_CALL` to reference the mock function from outside of the mock class. 89(Yes, C++ allows a subclass to change the access level of a virtual function in 90the base class.) Example: 91 92```cpp 93class Foo { 94 public: 95 ... 96 virtual bool Transform(Gadget* g) = 0; 97 98 protected: 99 virtual void Resume(); 100 101 private: 102 virtual int GetTimeOut(); 103}; 104 105class MockFoo : public Foo { 106 public: 107 ... 108 MOCK_METHOD(bool, Transform, (Gadget* g), (override)); 109 110 // The following must be in the public section, even though the 111 // methods are protected or private in the base class. 112 MOCK_METHOD(void, Resume, (), (override)); 113 MOCK_METHOD(int, GetTimeOut, (), (override)); 114}; 115``` 116 117### Mocking Overloaded Methods 118 119You can mock overloaded functions as usual. No special attention is required: 120 121```cpp 122class Foo { 123 ... 124 125 // Must be virtual as we'll inherit from Foo. 126 virtual ~Foo(); 127 128 // Overloaded on the types and/or numbers of arguments. 129 virtual int Add(Element x); 130 virtual int Add(int times, Element x); 131 132 // Overloaded on the const-ness of this object. 133 virtual Bar& GetBar(); 134 virtual const Bar& GetBar() const; 135}; 136 137class MockFoo : public Foo { 138 ... 139 MOCK_METHOD(int, Add, (Element x), (override)); 140 MOCK_METHOD(int, Add, (int times, Element x), (override)); 141 142 MOCK_METHOD(Bar&, GetBar, (), (override)); 143 MOCK_METHOD(const Bar&, GetBar, (), (const, override)); 144}; 145``` 146 147{: .callout .note} 148**Note:** if you don't mock all versions of the overloaded method, the compiler 149will give you a warning about some methods in the base class being hidden. To 150fix that, use `using` to bring them in scope: 151 152```cpp 153class MockFoo : public Foo { 154 ... 155 using Foo::Add; 156 MOCK_METHOD(int, Add, (Element x), (override)); 157 // We don't want to mock int Add(int times, Element x); 158 ... 159}; 160``` 161 162### Mocking Class Templates 163 164You can mock class templates just like any class. 165 166```cpp 167template <typename Elem> 168class StackInterface { 169 ... 170 // Must be virtual as we'll inherit from StackInterface. 171 virtual ~StackInterface(); 172 173 virtual int GetSize() const = 0; 174 virtual void Push(const Elem& x) = 0; 175}; 176 177template <typename Elem> 178class MockStack : public StackInterface<Elem> { 179 ... 180 MOCK_METHOD(int, GetSize, (), (override)); 181 MOCK_METHOD(void, Push, (const Elem& x), (override)); 182}; 183``` 184 185### Mocking Non-virtual Methods {#MockingNonVirtualMethods} 186 187gMock can mock non-virtual functions to be used in Hi-perf dependency injection. 188 189In this case, instead of sharing a common base class with the real class, your 190mock class will be *unrelated* to the real class, but contain methods with the 191same signatures. The syntax for mocking non-virtual methods is the *same* as 192mocking virtual methods (just don't add `override`): 193 194```cpp 195// A simple packet stream class. None of its members is virtual. 196class ConcretePacketStream { 197 public: 198 void AppendPacket(Packet* new_packet); 199 const Packet* GetPacket(size_t packet_number) const; 200 size_t NumberOfPackets() const; 201 ... 202}; 203 204// A mock packet stream class. It inherits from no other, but defines 205// GetPacket() and NumberOfPackets(). 206class MockPacketStream { 207 public: 208 MOCK_METHOD(const Packet*, GetPacket, (size_t packet_number), (const)); 209 MOCK_METHOD(size_t, NumberOfPackets, (), (const)); 210 ... 211}; 212``` 213 214Note that the mock class doesn't define `AppendPacket()`, unlike the real class. 215That's fine as long as the test doesn't need to call it. 216 217Next, you need a way to say that you want to use `ConcretePacketStream` in 218production code, and use `MockPacketStream` in tests. Since the functions are 219not virtual and the two classes are unrelated, you must specify your choice at 220*compile time* (as opposed to run time). 221 222One way to do it is to templatize your code that needs to use a packet stream. 223More specifically, you will give your code a template type argument for the type 224of the packet stream. In production, you will instantiate your template with 225`ConcretePacketStream` as the type argument. In tests, you will instantiate the 226same template with `MockPacketStream`. For example, you may write: 227 228```cpp 229template <class PacketStream> 230void CreateConnection(PacketStream* stream) { ... } 231 232template <class PacketStream> 233class PacketReader { 234 public: 235 void ReadPackets(PacketStream* stream, size_t packet_num); 236}; 237``` 238 239Then you can use `CreateConnection<ConcretePacketStream>()` and 240`PacketReader<ConcretePacketStream>` in production code, and use 241`CreateConnection<MockPacketStream>()` and `PacketReader<MockPacketStream>` in 242tests. 243 244```cpp 245 MockPacketStream mock_stream; 246 EXPECT_CALL(mock_stream, ...)...; 247 .. set more expectations on mock_stream ... 248 PacketReader<MockPacketStream> reader(&mock_stream); 249 ... exercise reader ... 250``` 251 252### Mocking Free Functions 253 254It is not possible to directly mock a free function (i.e. a C-style function or 255a static method). If you need to, you can rewrite your code to use an interface 256(abstract class). 257 258Instead of calling a free function (say, `OpenFile`) directly, introduce an 259interface for it and have a concrete subclass that calls the free function: 260 261```cpp 262class FileInterface { 263 public: 264 ... 265 virtual bool Open(const char* path, const char* mode) = 0; 266}; 267 268class File : public FileInterface { 269 public: 270 ... 271 bool Open(const char* path, const char* mode) override { 272 return OpenFile(path, mode); 273 } 274}; 275``` 276 277Your code should talk to `FileInterface` to open a file. Now it's easy to mock 278out the function. 279 280This may seem like a lot of hassle, but in practice you often have multiple 281related functions that you can put in the same interface, so the per-function 282syntactic overhead will be much lower. 283 284If you are concerned about the performance overhead incurred by virtual 285functions, and profiling confirms your concern, you can combine this with the 286recipe for [mocking non-virtual methods](#MockingNonVirtualMethods). 287 288### Old-Style `MOCK_METHODn` Macros 289 290Before the generic `MOCK_METHOD` macro 291[was introduced in 2018](https://github.com/google/googletest/commit/c5f08bf91944ce1b19bcf414fa1760e69d20afc2), 292mocks where created using a family of macros collectively called `MOCK_METHODn`. 293These macros are still supported, though migration to the new `MOCK_METHOD` is 294recommended. 295 296The macros in the `MOCK_METHODn` family differ from `MOCK_METHOD`: 297 298* The general structure is `MOCK_METHODn(MethodName, ReturnType(Args))`, 299 instead of `MOCK_METHOD(ReturnType, MethodName, (Args))`. 300* The number `n` must equal the number of arguments. 301* When mocking a const method, one must use `MOCK_CONST_METHODn`. 302* When mocking a class template, the macro name must be suffixed with `_T`. 303* In order to specify the call type, the macro name must be suffixed with 304 `_WITH_CALLTYPE`, and the call type is the first macro argument. 305 306Old macros and their new equivalents: 307 308<table> 309 <tr><th colspan=2>Simple</th></tr> 310 <tr> 311 <td>Old</td> 312 <td><code>MOCK_METHOD1(Foo, bool(int))</code></td> 313 </tr> 314 <tr> 315 <td>New</td> 316 <td><code>MOCK_METHOD(bool, Foo, (int))</code></td> 317 </tr> 318 319 <tr><th colspan=2>Const Method</th></tr> 320 <tr> 321 <td>Old</td> 322 <td><code>MOCK_CONST_METHOD1(Foo, bool(int))</code></td> 323 </tr> 324 <tr> 325 <td>New</td> 326 <td><code>MOCK_METHOD(bool, Foo, (int), (const))</code></td> 327 </tr> 328 329 <tr><th colspan=2>Method in a Class Template</th></tr> 330 <tr> 331 <td>Old</td> 332 <td><code>MOCK_METHOD1_T(Foo, bool(int))</code></td> 333 </tr> 334 <tr> 335 <td>New</td> 336 <td><code>MOCK_METHOD(bool, Foo, (int))</code></td> 337 </tr> 338 339 <tr><th colspan=2>Const Method in a Class Template</th></tr> 340 <tr> 341 <td>Old</td> 342 <td><code>MOCK_CONST_METHOD1_T(Foo, bool(int))</code></td> 343 </tr> 344 <tr> 345 <td>New</td> 346 <td><code>MOCK_METHOD(bool, Foo, (int), (const))</code></td> 347 </tr> 348 349 <tr><th colspan=2>Method with Call Type</th></tr> 350 <tr> 351 <td>Old</td> 352 <td><code>MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))</code></td> 353 </tr> 354 <tr> 355 <td>New</td> 356 <td><code>MOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))</code></td> 357 </tr> 358 359 <tr><th colspan=2>Const Method with Call Type</th></tr> 360 <tr> 361 <td>Old</td> 362 <td><code>MOCK_CONST_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))</code></td> 363 </tr> 364 <tr> 365 <td>New</td> 366 <td><code>MOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))</code></td> 367 </tr> 368 369 <tr><th colspan=2>Method with Call Type in a Class Template</th></tr> 370 <tr> 371 <td>Old</td> 372 <td><code>MOCK_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))</code></td> 373 </tr> 374 <tr> 375 <td>New</td> 376 <td><code>MOCK_METHOD(bool, Foo, (int), (Calltype(STDMETHODCALLTYPE)))</code></td> 377 </tr> 378 379 <tr><th colspan=2>Const Method with Call Type in a Class Template</th></tr> 380 <tr> 381 <td>Old</td> 382 <td><code>MOCK_CONST_METHOD1_T_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int))</code></td> 383 </tr> 384 <tr> 385 <td>New</td> 386 <td><code>MOCK_METHOD(bool, Foo, (int), (const, Calltype(STDMETHODCALLTYPE)))</code></td> 387 </tr> 388</table> 389 390### The Nice, the Strict, and the Naggy {#NiceStrictNaggy} 391 392If a mock method has no `EXPECT_CALL` spec but is called, we say that it's an 393"uninteresting call", and the default action (which can be specified using 394`ON_CALL()`) of the method will be taken. Currently, an uninteresting call will 395also by default cause gMock to print a warning. 396 397However, sometimes you may want to ignore these uninteresting calls, and 398sometimes you may want to treat them as errors. gMock lets you make the decision 399on a per-mock-object basis. 400 401Suppose your test uses a mock class `MockFoo`: 402 403```cpp 404TEST(...) { 405 MockFoo mock_foo; 406 EXPECT_CALL(mock_foo, DoThis()); 407 ... code that uses mock_foo ... 408} 409``` 410 411If a method of `mock_foo` other than `DoThis()` is called, you will get a 412warning. However, if you rewrite your test to use `NiceMock<MockFoo>` instead, 413you can suppress the warning: 414 415```cpp 416using ::testing::NiceMock; 417 418TEST(...) { 419 NiceMock<MockFoo> mock_foo; 420 EXPECT_CALL(mock_foo, DoThis()); 421 ... code that uses mock_foo ... 422} 423``` 424 425`NiceMock<MockFoo>` is a subclass of `MockFoo`, so it can be used wherever 426`MockFoo` is accepted. 427 428It also works if `MockFoo`'s constructor takes some arguments, as 429`NiceMock<MockFoo>` "inherits" `MockFoo`'s constructors: 430 431```cpp 432using ::testing::NiceMock; 433 434TEST(...) { 435 NiceMock<MockFoo> mock_foo(5, "hi"); // Calls MockFoo(5, "hi"). 436 EXPECT_CALL(mock_foo, DoThis()); 437 ... code that uses mock_foo ... 438} 439``` 440 441The usage of `StrictMock` is similar, except that it makes all uninteresting 442calls failures: 443 444```cpp 445using ::testing::StrictMock; 446 447TEST(...) { 448 StrictMock<MockFoo> mock_foo; 449 EXPECT_CALL(mock_foo, DoThis()); 450 ... code that uses mock_foo ... 451 452 // The test will fail if a method of mock_foo other than DoThis() 453 // is called. 454} 455``` 456 457{: .callout .note} 458NOTE: `NiceMock` and `StrictMock` only affects *uninteresting* calls (calls of 459*methods* with no expectations); they do not affect *unexpected* calls (calls of 460methods with expectations, but they don't match). See 461[Understanding Uninteresting vs Unexpected Calls](#uninteresting-vs-unexpected). 462 463There are some caveats though (sadly they are side effects of C++'s 464limitations): 465 4661. `NiceMock<MockFoo>` and `StrictMock<MockFoo>` only work for mock methods 467 defined using the `MOCK_METHOD` macro **directly** in the `MockFoo` class. 468 If a mock method is defined in a **base class** of `MockFoo`, the "nice" or 469 "strict" modifier may not affect it, depending on the compiler. In 470 particular, nesting `NiceMock` and `StrictMock` (e.g. 471 `NiceMock<StrictMock<MockFoo> >`) is **not** supported. 4722. `NiceMock<MockFoo>` and `StrictMock<MockFoo>` may not work correctly if the 473 destructor of `MockFoo` is not virtual. We would like to fix this, but it 474 requires cleaning up existing tests. 475 476Finally, you should be **very cautious** about when to use naggy or strict 477mocks, as they tend to make tests more brittle and harder to maintain. When you 478refactor your code without changing its externally visible behavior, ideally you 479shouldn't need to update any tests. If your code interacts with a naggy mock, 480however, you may start to get spammed with warnings as the result of your 481change. Worse, if your code interacts with a strict mock, your tests may start 482to fail and you'll be forced to fix them. Our general recommendation is to use 483nice mocks (not yet the default) most of the time, use naggy mocks (the current 484default) when developing or debugging tests, and use strict mocks only as the 485last resort. 486 487### Simplifying the Interface without Breaking Existing Code {#SimplerInterfaces} 488 489Sometimes a method has a long list of arguments that is mostly uninteresting. 490For example: 491 492```cpp 493class LogSink { 494 public: 495 ... 496 virtual void send(LogSeverity severity, const char* full_filename, 497 const char* base_filename, int line, 498 const struct tm* tm_time, 499 const char* message, size_t message_len) = 0; 500}; 501``` 502 503This method's argument list is lengthy and hard to work with (the `message` 504argument is not even 0-terminated). If we mock it as is, using the mock will be 505awkward. If, however, we try to simplify this interface, we'll need to fix all 506clients depending on it, which is often infeasible. 507 508The trick is to redispatch the method in the mock class: 509 510```cpp 511class ScopedMockLog : public LogSink { 512 public: 513 ... 514 void send(LogSeverity severity, const char* full_filename, 515 const char* base_filename, int line, const tm* tm_time, 516 const char* message, size_t message_len) override { 517 // We are only interested in the log severity, full file name, and 518 // log message. 519 Log(severity, full_filename, std::string(message, message_len)); 520 } 521 522 // Implements the mock method: 523 // 524 // void Log(LogSeverity severity, 525 // const string& file_path, 526 // const string& message); 527 MOCK_METHOD(void, Log, 528 (LogSeverity severity, const string& file_path, 529 const string& message)); 530}; 531``` 532 533By defining a new mock method with a trimmed argument list, we make the mock 534class more user-friendly. 535 536This technique may also be applied to make overloaded methods more amenable to 537mocking. For example, when overloads have been used to implement default 538arguments: 539 540```cpp 541class MockTurtleFactory : public TurtleFactory { 542 public: 543 Turtle* MakeTurtle(int length, int weight) override { ... } 544 Turtle* MakeTurtle(int length, int weight, int speed) override { ... } 545 546 // the above methods delegate to this one: 547 MOCK_METHOD(Turtle*, DoMakeTurtle, ()); 548}; 549``` 550 551This allows tests that don't care which overload was invoked to avoid specifying 552argument matchers: 553 554```cpp 555ON_CALL(factory, DoMakeTurtle) 556 .WillByDefault(Return(MakeMockTurtle())); 557``` 558 559### Alternative to Mocking Concrete Classes 560 561Often you may find yourself using classes that don't implement interfaces. In 562order to test your code that uses such a class (let's call it `Concrete`), you 563may be tempted to make the methods of `Concrete` virtual and then mock it. 564 565Try not to do that. 566 567Making a non-virtual function virtual is a big decision. It creates an extension 568point where subclasses can tweak your class' behavior. This weakens your control 569on the class because now it's harder to maintain the class invariants. You 570should make a function virtual only when there is a valid reason for a subclass 571to override it. 572 573Mocking concrete classes directly is problematic as it creates a tight coupling 574between the class and the tests - any small change in the class may invalidate 575your tests and make test maintenance a pain. 576 577To avoid such problems, many programmers have been practicing "coding to 578interfaces": instead of talking to the `Concrete` class, your code would define 579an interface and talk to it. Then you implement that interface as an adaptor on 580top of `Concrete`. In tests, you can easily mock that interface to observe how 581your code is doing. 582 583This technique incurs some overhead: 584 585* You pay the cost of virtual function calls (usually not a problem). 586* There is more abstraction for the programmers to learn. 587 588However, it can also bring significant benefits in addition to better 589testability: 590 591* `Concrete`'s API may not fit your problem domain very well, as you may not 592 be the only client it tries to serve. By designing your own interface, you 593 have a chance to tailor it to your need - you may add higher-level 594 functionalities, rename stuff, etc instead of just trimming the class. This 595 allows you to write your code (user of the interface) in a more natural way, 596 which means it will be more readable, more maintainable, and you'll be more 597 productive. 598* If `Concrete`'s implementation ever has to change, you don't have to rewrite 599 everywhere it is used. Instead, you can absorb the change in your 600 implementation of the interface, and your other code and tests will be 601 insulated from this change. 602 603Some people worry that if everyone is practicing this technique, they will end 604up writing lots of redundant code. This concern is totally understandable. 605However, there are two reasons why it may not be the case: 606 607* Different projects may need to use `Concrete` in different ways, so the best 608 interfaces for them will be different. Therefore, each of them will have its 609 own domain-specific interface on top of `Concrete`, and they will not be the 610 same code. 611* If enough projects want to use the same interface, they can always share it, 612 just like they have been sharing `Concrete`. You can check in the interface 613 and the adaptor somewhere near `Concrete` (perhaps in a `contrib` 614 sub-directory) and let many projects use it. 615 616You need to weigh the pros and cons carefully for your particular problem, but 617I'd like to assure you that the Java community has been practicing this for a 618long time and it's a proven effective technique applicable in a wide variety of 619situations. :-) 620 621### Delegating Calls to a Fake {#DelegatingToFake} 622 623Some times you have a non-trivial fake implementation of an interface. For 624example: 625 626```cpp 627class Foo { 628 public: 629 virtual ~Foo() {} 630 virtual char DoThis(int n) = 0; 631 virtual void DoThat(const char* s, int* p) = 0; 632}; 633 634class FakeFoo : public Foo { 635 public: 636 char DoThis(int n) override { 637 return (n > 0) ? '+' : 638 (n < 0) ? '-' : '0'; 639 } 640 641 void DoThat(const char* s, int* p) override { 642 *p = strlen(s); 643 } 644}; 645``` 646 647Now you want to mock this interface such that you can set expectations on it. 648However, you also want to use `FakeFoo` for the default behavior, as duplicating 649it in the mock object is, well, a lot of work. 650 651When you define the mock class using gMock, you can have it delegate its default 652action to a fake class you already have, using this pattern: 653 654```cpp 655class MockFoo : public Foo { 656 public: 657 // Normal mock method definitions using gMock. 658 MOCK_METHOD(char, DoThis, (int n), (override)); 659 MOCK_METHOD(void, DoThat, (const char* s, int* p), (override)); 660 661 // Delegates the default actions of the methods to a FakeFoo object. 662 // This must be called *before* the custom ON_CALL() statements. 663 void DelegateToFake() { 664 ON_CALL(*this, DoThis).WillByDefault([this](int n) { 665 return fake_.DoThis(n); 666 }); 667 ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { 668 fake_.DoThat(s, p); 669 }); 670 } 671 672 private: 673 FakeFoo fake_; // Keeps an instance of the fake in the mock. 674}; 675``` 676 677With that, you can use `MockFoo` in your tests as usual. Just remember that if 678you don't explicitly set an action in an `ON_CALL()` or `EXPECT_CALL()`, the 679fake will be called upon to do it.: 680 681```cpp 682using ::testing::_; 683 684TEST(AbcTest, Xyz) { 685 MockFoo foo; 686 687 foo.DelegateToFake(); // Enables the fake for delegation. 688 689 // Put your ON_CALL(foo, ...)s here, if any. 690 691 // No action specified, meaning to use the default action. 692 EXPECT_CALL(foo, DoThis(5)); 693 EXPECT_CALL(foo, DoThat(_, _)); 694 695 int n = 0; 696 EXPECT_EQ('+', foo.DoThis(5)); // FakeFoo::DoThis() is invoked. 697 foo.DoThat("Hi", &n); // FakeFoo::DoThat() is invoked. 698 EXPECT_EQ(2, n); 699} 700``` 701 702**Some tips:** 703 704* If you want, you can still override the default action by providing your own 705 `ON_CALL()` or using `.WillOnce()` / `.WillRepeatedly()` in `EXPECT_CALL()`. 706* In `DelegateToFake()`, you only need to delegate the methods whose fake 707 implementation you intend to use. 708 709* The general technique discussed here works for overloaded methods, but 710 you'll need to tell the compiler which version you mean. To disambiguate a 711 mock function (the one you specify inside the parentheses of `ON_CALL()`), 712 use [this technique](#SelectOverload); to disambiguate a fake function (the 713 one you place inside `Invoke()`), use a `static_cast` to specify the 714 function's type. For instance, if class `Foo` has methods `char DoThis(int 715 n)` and `bool DoThis(double x) const`, and you want to invoke the latter, 716 you need to write `Invoke(&fake_, static_cast<bool (FakeFoo::*)(double) 717 const>(&FakeFoo::DoThis))` instead of `Invoke(&fake_, &FakeFoo::DoThis)` 718 (The strange-looking thing inside the angled brackets of `static_cast` is 719 the type of a function pointer to the second `DoThis()` method.). 720 721* Having to mix a mock and a fake is often a sign of something gone wrong. 722 Perhaps you haven't got used to the interaction-based way of testing yet. Or 723 perhaps your interface is taking on too many roles and should be split up. 724 Therefore, **don't abuse this**. We would only recommend to do it as an 725 intermediate step when you are refactoring your code. 726 727Regarding the tip on mixing a mock and a fake, here's an example on why it may 728be a bad sign: Suppose you have a class `System` for low-level system 729operations. In particular, it does file and I/O operations. And suppose you want 730to test how your code uses `System` to do I/O, and you just want the file 731operations to work normally. If you mock out the entire `System` class, you'll 732have to provide a fake implementation for the file operation part, which 733suggests that `System` is taking on too many roles. 734 735Instead, you can define a `FileOps` interface and an `IOOps` interface and split 736`System`'s functionalities into the two. Then you can mock `IOOps` without 737mocking `FileOps`. 738 739### Delegating Calls to a Real Object 740 741When using testing doubles (mocks, fakes, stubs, and etc), sometimes their 742behaviors will differ from those of the real objects. This difference could be 743either intentional (as in simulating an error such that you can test the error 744handling code) or unintentional. If your mocks have different behaviors than the 745real objects by mistake, you could end up with code that passes the tests but 746fails in production. 747 748You can use the *delegating-to-real* technique to ensure that your mock has the 749same behavior as the real object while retaining the ability to validate calls. 750This technique is very similar to the [delegating-to-fake](#DelegatingToFake) 751technique, the difference being that we use a real object instead of a fake. 752Here's an example: 753 754```cpp 755using ::testing::AtLeast; 756 757class MockFoo : public Foo { 758 public: 759 MockFoo() { 760 // By default, all calls are delegated to the real object. 761 ON_CALL(*this, DoThis).WillByDefault([this](int n) { 762 return real_.DoThis(n); 763 }); 764 ON_CALL(*this, DoThat).WillByDefault([this](const char* s, int* p) { 765 real_.DoThat(s, p); 766 }); 767 ... 768 } 769 MOCK_METHOD(char, DoThis, ...); 770 MOCK_METHOD(void, DoThat, ...); 771 ... 772 private: 773 Foo real_; 774}; 775 776... 777 MockFoo mock; 778 EXPECT_CALL(mock, DoThis()) 779 .Times(3); 780 EXPECT_CALL(mock, DoThat("Hi")) 781 .Times(AtLeast(1)); 782 ... use mock in test ... 783``` 784 785With this, gMock will verify that your code made the right calls (with the right 786arguments, in the right order, called the right number of times, etc), and a 787real object will answer the calls (so the behavior will be the same as in 788production). This gives you the best of both worlds. 789 790### Delegating Calls to a Parent Class 791 792Ideally, you should code to interfaces, whose methods are all pure virtual. In 793reality, sometimes you do need to mock a virtual method that is not pure (i.e, 794it already has an implementation). For example: 795 796```cpp 797class Foo { 798 public: 799 virtual ~Foo(); 800 801 virtual void Pure(int n) = 0; 802 virtual int Concrete(const char* str) { ... } 803}; 804 805class MockFoo : public Foo { 806 public: 807 // Mocking a pure method. 808 MOCK_METHOD(void, Pure, (int n), (override)); 809 // Mocking a concrete method. Foo::Concrete() is shadowed. 810 MOCK_METHOD(int, Concrete, (const char* str), (override)); 811}; 812``` 813 814Sometimes you may want to call `Foo::Concrete()` instead of 815`MockFoo::Concrete()`. Perhaps you want to do it as part of a stub action, or 816perhaps your test doesn't need to mock `Concrete()` at all (but it would be 817oh-so painful to have to define a new mock class whenever you don't need to mock 818one of its methods). 819 820You can call `Foo::Concrete()` inside an action by: 821 822```cpp 823... 824 EXPECT_CALL(foo, Concrete).WillOnce([&foo](const char* str) { 825 return foo.Foo::Concrete(str); 826 }); 827``` 828 829or tell the mock object that you don't want to mock `Concrete()`: 830 831```cpp 832... 833 ON_CALL(foo, Concrete).WillByDefault([&foo](const char* str) { 834 return foo.Foo::Concrete(str); 835 }); 836``` 837 838(Why don't we just write `{ return foo.Concrete(str); }`? If you do that, 839`MockFoo::Concrete()` will be called (and cause an infinite recursion) since 840`Foo::Concrete()` is virtual. That's just how C++ works.) 841 842## Using Matchers 843 844### Matching Argument Values Exactly 845 846You can specify exactly which arguments a mock method is expecting: 847 848```cpp 849using ::testing::Return; 850... 851 EXPECT_CALL(foo, DoThis(5)) 852 .WillOnce(Return('a')); 853 EXPECT_CALL(foo, DoThat("Hello", bar)); 854``` 855 856### Using Simple Matchers 857 858You can use matchers to match arguments that have a certain property: 859 860```cpp 861using ::testing::NotNull; 862using ::testing::Return; 863... 864 EXPECT_CALL(foo, DoThis(Ge(5))) // The argument must be >= 5. 865 .WillOnce(Return('a')); 866 EXPECT_CALL(foo, DoThat("Hello", NotNull())); 867 // The second argument must not be NULL. 868``` 869 870A frequently used matcher is `_`, which matches anything: 871 872```cpp 873 EXPECT_CALL(foo, DoThat(_, NotNull())); 874``` 875 876### Combining Matchers {#CombiningMatchers} 877 878You can build complex matchers from existing ones using `AllOf()`, 879`AllOfArray()`, `AnyOf()`, `AnyOfArray()` and `Not()`: 880 881```cpp 882using ::testing::AllOf; 883using ::testing::Gt; 884using ::testing::HasSubstr; 885using ::testing::Ne; 886using ::testing::Not; 887... 888 // The argument must be > 5 and != 10. 889 EXPECT_CALL(foo, DoThis(AllOf(Gt(5), 890 Ne(10)))); 891 892 // The first argument must not contain sub-string "blah". 893 EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")), 894 NULL)); 895``` 896 897Matchers are function objects, and parametrized matchers can be composed just 898like any other function. However because their types can be long and rarely 899provide meaningful information, it can be easier to express them with C++14 900generic lambdas to avoid specifying types. For example, 901 902```cpp 903using ::testing::Contains; 904using ::testing::Property; 905 906inline constexpr auto HasFoo = [](const auto& f) { 907 return Property("foo", &MyClass::foo, Contains(f)); 908}; 909... 910 EXPECT_THAT(x, HasFoo("blah")); 911``` 912 913### Casting Matchers {#SafeMatcherCast} 914 915gMock matchers are statically typed, meaning that the compiler can catch your 916mistake if you use a matcher of the wrong type (for example, if you use `Eq(5)` 917to match a `string` argument). Good for you! 918 919Sometimes, however, you know what you're doing and want the compiler to give you 920some slack. One example is that you have a matcher for `long` and the argument 921you want to match is `int`. While the two types aren't exactly the same, there 922is nothing really wrong with using a `Matcher<long>` to match an `int` - after 923all, we can first convert the `int` argument to a `long` losslessly before 924giving it to the matcher. 925 926To support this need, gMock gives you the `SafeMatcherCast<T>(m)` function. It 927casts a matcher `m` to type `Matcher<T>`. To ensure safety, gMock checks that 928(let `U` be the type `m` accepts : 929 9301. Type `T` can be *implicitly* cast to type `U`; 9312. When both `T` and `U` are built-in arithmetic types (`bool`, integers, and 932 floating-point numbers), the conversion from `T` to `U` is not lossy (in 933 other words, any value representable by `T` can also be represented by `U`); 934 and 9353. When `U` is a reference, `T` must also be a reference (as the underlying 936 matcher may be interested in the address of the `U` value). 937 938The code won't compile if any of these conditions isn't met. 939 940Here's one example: 941 942```cpp 943using ::testing::SafeMatcherCast; 944 945// A base class and a child class. 946class Base { ... }; 947class Derived : public Base { ... }; 948 949class MockFoo : public Foo { 950 public: 951 MOCK_METHOD(void, DoThis, (Derived* derived), (override)); 952}; 953 954... 955 MockFoo foo; 956 // m is a Matcher<Base*> we got from somewhere. 957 EXPECT_CALL(foo, DoThis(SafeMatcherCast<Derived*>(m))); 958``` 959 960If you find `SafeMatcherCast<T>(m)` too limiting, you can use a similar function 961`MatcherCast<T>(m)`. The difference is that `MatcherCast` works as long as you 962can `static_cast` type `T` to type `U`. 963 964`MatcherCast` essentially lets you bypass C++'s type system (`static_cast` isn't 965always safe as it could throw away information, for example), so be careful not 966to misuse/abuse it. 967 968### Selecting Between Overloaded Functions {#SelectOverload} 969 970If you expect an overloaded function to be called, the compiler may need some 971help on which overloaded version it is. 972 973To disambiguate functions overloaded on the const-ness of this object, use the 974`Const()` argument wrapper. 975 976```cpp 977using ::testing::ReturnRef; 978 979class MockFoo : public Foo { 980 ... 981 MOCK_METHOD(Bar&, GetBar, (), (override)); 982 MOCK_METHOD(const Bar&, GetBar, (), (const, override)); 983}; 984 985... 986 MockFoo foo; 987 Bar bar1, bar2; 988 EXPECT_CALL(foo, GetBar()) // The non-const GetBar(). 989 .WillOnce(ReturnRef(bar1)); 990 EXPECT_CALL(Const(foo), GetBar()) // The const GetBar(). 991 .WillOnce(ReturnRef(bar2)); 992``` 993 994(`Const()` is defined by gMock and returns a `const` reference to its argument.) 995 996To disambiguate overloaded functions with the same number of arguments but 997different argument types, you may need to specify the exact type of a matcher, 998either by wrapping your matcher in `Matcher<type>()`, or using a matcher whose 999type is fixed (`TypedEq<type>`, `An<type>()`, etc): 1000 1001```cpp 1002using ::testing::An; 1003using ::testing::Matcher; 1004using ::testing::TypedEq; 1005 1006class MockPrinter : public Printer { 1007 public: 1008 MOCK_METHOD(void, Print, (int n), (override)); 1009 MOCK_METHOD(void, Print, (char c), (override)); 1010}; 1011 1012TEST(PrinterTest, Print) { 1013 MockPrinter printer; 1014 1015 EXPECT_CALL(printer, Print(An<int>())); // void Print(int); 1016 EXPECT_CALL(printer, Print(Matcher<int>(Lt(5)))); // void Print(int); 1017 EXPECT_CALL(printer, Print(TypedEq<char>('a'))); // void Print(char); 1018 1019 printer.Print(3); 1020 printer.Print(6); 1021 printer.Print('a'); 1022} 1023``` 1024 1025### Performing Different Actions Based on the Arguments 1026 1027When a mock method is called, the *last* matching expectation that's still 1028active will be selected (think "newer overrides older"). So, you can make a 1029method do different things depending on its argument values like this: 1030 1031```cpp 1032using ::testing::_; 1033using ::testing::Lt; 1034using ::testing::Return; 1035... 1036 // The default case. 1037 EXPECT_CALL(foo, DoThis(_)) 1038 .WillRepeatedly(Return('b')); 1039 // The more specific case. 1040 EXPECT_CALL(foo, DoThis(Lt(5))) 1041 .WillRepeatedly(Return('a')); 1042``` 1043 1044Now, if `foo.DoThis()` is called with a value less than 5, `'a'` will be 1045returned; otherwise `'b'` will be returned. 1046 1047### Matching Multiple Arguments as a Whole 1048 1049Sometimes it's not enough to match the arguments individually. For example, we 1050may want to say that the first argument must be less than the second argument. 1051The `With()` clause allows us to match all arguments of a mock function as a 1052whole. For example, 1053 1054```cpp 1055using ::testing::_; 1056using ::testing::Ne; 1057using ::testing::Lt; 1058... 1059 EXPECT_CALL(foo, InRange(Ne(0), _)) 1060 .With(Lt()); 1061``` 1062 1063says that the first argument of `InRange()` must not be 0, and must be less than 1064the second argument. 1065 1066The expression inside `With()` must be a matcher of type `Matcher<std::tuple<A1, 1067..., An>>`, where `A1`, ..., `An` are the types of the function arguments. 1068 1069You can also write `AllArgs(m)` instead of `m` inside `.With()`. The two forms 1070are equivalent, but `.With(AllArgs(Lt()))` is more readable than `.With(Lt())`. 1071 1072You can use `Args<k1, ..., kn>(m)` to match the `n` selected arguments (as a 1073tuple) against `m`. For example, 1074 1075```cpp 1076using ::testing::_; 1077using ::testing::AllOf; 1078using ::testing::Args; 1079using ::testing::Lt; 1080... 1081 EXPECT_CALL(foo, Blah) 1082 .With(AllOf(Args<0, 1>(Lt()), Args<1, 2>(Lt()))); 1083``` 1084 1085says that `Blah` will be called with arguments `x`, `y`, and `z` where `x < y < 1086z`. Note that in this example, it wasn't necessary to specify the positional 1087matchers. 1088 1089As a convenience and example, gMock provides some matchers for 2-tuples, 1090including the `Lt()` matcher above. See 1091[Multi-argument Matchers](reference/matchers.md#MultiArgMatchers) for the 1092complete list. 1093 1094Note that if you want to pass the arguments to a predicate of your own (e.g. 1095`.With(Args<0, 1>(Truly(&MyPredicate)))`), that predicate MUST be written to 1096take a `std::tuple` as its argument; gMock will pass the `n` selected arguments 1097as *one* single tuple to the predicate. 1098 1099### Using Matchers as Predicates 1100 1101Have you noticed that a matcher is just a fancy predicate that also knows how to 1102describe itself? Many existing algorithms take predicates as arguments (e.g. 1103those defined in STL's `<algorithm>` header), and it would be a shame if gMock 1104matchers were not allowed to participate. 1105 1106Luckily, you can use a matcher where a unary predicate functor is expected by 1107wrapping it inside the `Matches()` function. For example, 1108 1109```cpp 1110#include <algorithm> 1111#include <vector> 1112 1113using ::testing::Matches; 1114using ::testing::Ge; 1115 1116vector<int> v; 1117... 1118// How many elements in v are >= 10? 1119const int count = count_if(v.begin(), v.end(), Matches(Ge(10))); 1120``` 1121 1122Since you can build complex matchers from simpler ones easily using gMock, this 1123gives you a way to conveniently construct composite predicates (doing the same 1124using STL's `<functional>` header is just painful). For example, here's a 1125predicate that's satisfied by any number that is >= 0, <= 100, and != 50: 1126 1127```cpp 1128using testing::AllOf; 1129using testing::Ge; 1130using testing::Le; 1131using testing::Matches; 1132using testing::Ne; 1133... 1134Matches(AllOf(Ge(0), Le(100), Ne(50))) 1135``` 1136 1137### Using Matchers in googletest Assertions 1138 1139See [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions 1140Reference. 1141 1142### Using Predicates as Matchers 1143 1144gMock provides a set of built-in matchers for matching arguments with expected 1145values—see the [Matchers Reference](reference/matchers.md) for more information. 1146In case you find the built-in set lacking, you can use an arbitrary unary 1147predicate function or functor as a matcher - as long as the predicate accepts a 1148value of the type you want. You do this by wrapping the predicate inside the 1149`Truly()` function, for example: 1150 1151```cpp 1152using ::testing::Truly; 1153 1154int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; } 1155... 1156 // Bar() must be called with an even number. 1157 EXPECT_CALL(foo, Bar(Truly(IsEven))); 1158``` 1159 1160Note that the predicate function / functor doesn't have to return `bool`. It 1161works as long as the return value can be used as the condition in the statement 1162`if (condition) ...`. 1163 1164### Matching Arguments that Are Not Copyable 1165 1166When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, gMock saves away a copy of 1167`bar`. When `Foo()` is called later, gMock compares the argument to `Foo()` with 1168the saved copy of `bar`. This way, you don't need to worry about `bar` being 1169modified or destroyed after the `EXPECT_CALL()` is executed. The same is true 1170when you use matchers like `Eq(bar)`, `Le(bar)`, and so on. 1171 1172But what if `bar` cannot be copied (i.e. has no copy constructor)? You could 1173define your own matcher function or callback and use it with `Truly()`, as the 1174previous couple of recipes have shown. Or, you may be able to get away from it 1175if you can guarantee that `bar` won't be changed after the `EXPECT_CALL()` is 1176executed. Just tell gMock that it should save a reference to `bar`, instead of a 1177copy of it. Here's how: 1178 1179```cpp 1180using ::testing::Eq; 1181using ::testing::Lt; 1182... 1183 // Expects that Foo()'s argument == bar. 1184 EXPECT_CALL(mock_obj, Foo(Eq(std::ref(bar)))); 1185 1186 // Expects that Foo()'s argument < bar. 1187 EXPECT_CALL(mock_obj, Foo(Lt(std::ref(bar)))); 1188``` 1189 1190Remember: if you do this, don't change `bar` after the `EXPECT_CALL()`, or the 1191result is undefined. 1192 1193### Validating a Member of an Object 1194 1195Often a mock function takes a reference to object as an argument. When matching 1196the argument, you may not want to compare the entire object against a fixed 1197object, as that may be over-specification. Instead, you may need to validate a 1198certain member variable or the result of a certain getter method of the object. 1199You can do this with `Field()` and `Property()`. More specifically, 1200 1201```cpp 1202Field(&Foo::bar, m) 1203``` 1204 1205is a matcher that matches a `Foo` object whose `bar` member variable satisfies 1206matcher `m`. 1207 1208```cpp 1209Property(&Foo::baz, m) 1210``` 1211 1212is a matcher that matches a `Foo` object whose `baz()` method returns a value 1213that satisfies matcher `m`. 1214 1215For example: 1216 1217| Expression | Description | 1218| :--------------------------- | :--------------------------------------- | 1219| `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`. | 1220| `Property(&Foo::name, StartsWith("John "))` | Matches `x` where `x.name()` starts with `"John "`. | 1221 1222Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no argument 1223and be declared as `const`. Don't use `Property()` against member functions that 1224you do not own, because taking addresses of functions is fragile and generally 1225not part of the contract of the function. 1226 1227`Field()` and `Property()` can also match plain pointers to objects. For 1228instance, 1229 1230```cpp 1231using ::testing::Field; 1232using ::testing::Ge; 1233... 1234Field(&Foo::number, Ge(3)) 1235``` 1236 1237matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, the match 1238will always fail regardless of the inner matcher. 1239 1240What if you want to validate more than one members at the same time? Remember 1241that there are [`AllOf()` and `AllOfArray()`](#CombiningMatchers). 1242 1243Finally `Field()` and `Property()` provide overloads that take the field or 1244property names as the first argument to include it in the error message. This 1245can be useful when creating combined matchers. 1246 1247```cpp 1248using ::testing::AllOf; 1249using ::testing::Field; 1250using ::testing::Matcher; 1251using ::testing::SafeMatcherCast; 1252 1253Matcher<Foo> IsFoo(const Foo& foo) { 1254 return AllOf(Field("some_field", &Foo::some_field, foo.some_field), 1255 Field("other_field", &Foo::other_field, foo.other_field), 1256 Field("last_field", &Foo::last_field, foo.last_field)); 1257} 1258``` 1259 1260### Validating the Value Pointed to by a Pointer Argument 1261 1262C++ functions often take pointers as arguments. You can use matchers like 1263`IsNull()`, `NotNull()`, and other comparison matchers to match a pointer, but 1264what if you want to make sure the value *pointed to* by the pointer, instead of 1265the pointer itself, has a certain property? Well, you can use the `Pointee(m)` 1266matcher. 1267 1268`Pointee(m)` matches a pointer if and only if `m` matches the value the pointer 1269points to. For example: 1270 1271```cpp 1272using ::testing::Ge; 1273using ::testing::Pointee; 1274... 1275 EXPECT_CALL(foo, Bar(Pointee(Ge(3)))); 1276``` 1277 1278expects `foo.Bar()` to be called with a pointer that points to a value greater 1279than or equal to 3. 1280 1281One nice thing about `Pointee()` is that it treats a `NULL` pointer as a match 1282failure, so you can write `Pointee(m)` instead of 1283 1284```cpp 1285using ::testing::AllOf; 1286using ::testing::NotNull; 1287using ::testing::Pointee; 1288... 1289 AllOf(NotNull(), Pointee(m)) 1290``` 1291 1292without worrying that a `NULL` pointer will crash your test. 1293 1294Also, did we tell you that `Pointee()` works with both raw pointers **and** 1295smart pointers (`std::unique_ptr`, `std::shared_ptr`, etc)? 1296 1297What if you have a pointer to pointer? You guessed it - you can use nested 1298`Pointee()` to probe deeper inside the value. For example, 1299`Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer that points 1300to a number less than 3 (what a mouthful...). 1301 1302### Defining a Custom Matcher Class {#CustomMatcherClass} 1303 1304Most matchers can be simply defined using [the MATCHER* macros](#NewMatchers), 1305which are terse and flexible, and produce good error messages. However, these 1306macros are not very explicit about the interfaces they create and are not always 1307suitable, especially for matchers that will be widely reused. 1308 1309For more advanced cases, you may need to define your own matcher class. A custom 1310matcher allows you to test a specific invariant property of that object. Let's 1311take a look at how to do so. 1312 1313Imagine you have a mock function that takes an object of type `Foo`, which has 1314an `int bar()` method and an `int baz()` method. You want to constrain that the 1315argument's `bar()` value plus its `baz()` value is a given number. (This is an 1316invariant.) Here's how we can write and use a matcher class to do so: 1317 1318```cpp 1319class BarPlusBazEqMatcher { 1320 public: 1321 using is_gtest_matcher = void; 1322 1323 explicit BarPlusBazEqMatcher(int expected_sum) 1324 : expected_sum_(expected_sum) {} 1325 1326 bool MatchAndExplain(const Foo& foo, 1327 std::ostream* /* listener */) const { 1328 return (foo.bar() + foo.baz()) == expected_sum_; 1329 } 1330 1331 void DescribeTo(std::ostream* os) const { 1332 *os << "bar() + baz() equals " << expected_sum_; 1333 } 1334 1335 void DescribeNegationTo(std::ostream* os) const { 1336 *os << "bar() + baz() does not equal " << expected_sum_; 1337 } 1338 private: 1339 const int expected_sum_; 1340}; 1341 1342::testing::Matcher<const Foo&> BarPlusBazEq(int expected_sum) { 1343 return BarPlusBazEqMatcher(expected_sum); 1344} 1345 1346... 1347 Foo foo; 1348 EXPECT_THAT(foo, BarPlusBazEq(5))...; 1349``` 1350 1351### Matching Containers 1352 1353Sometimes an STL container (e.g. list, vector, map, ...) is passed to a mock 1354function and you may want to validate it. Since most STL containers support the 1355`==` operator, you can write `Eq(expected_container)` or simply 1356`expected_container` to match a container exactly. 1357 1358Sometimes, though, you may want to be more flexible (for example, the first 1359element must be an exact match, but the second element can be any positive 1360number, and so on). Also, containers used in tests often have a small number of 1361elements, and having to define the expected container out-of-line is a bit of a 1362hassle. 1363 1364You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in such 1365cases: 1366 1367```cpp 1368using ::testing::_; 1369using ::testing::ElementsAre; 1370using ::testing::Gt; 1371... 1372 MOCK_METHOD(void, Foo, (const vector<int>& numbers), (override)); 1373... 1374 EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5))); 1375``` 1376 1377The above matcher says that the container must have 4 elements, which must be 1, 1378greater than 0, anything, and 5 respectively. 1379 1380If you instead write: 1381 1382```cpp 1383using ::testing::_; 1384using ::testing::Gt; 1385using ::testing::UnorderedElementsAre; 1386... 1387 MOCK_METHOD(void, Foo, (const vector<int>& numbers), (override)); 1388... 1389 EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5))); 1390``` 1391 1392It means that the container must have 4 elements, which (under some permutation) 1393must be 1, greater than 0, anything, and 5 respectively. 1394 1395As an alternative you can place the arguments in a C-style array and use 1396`ElementsAreArray()` or `UnorderedElementsAreArray()` instead: 1397 1398```cpp 1399using ::testing::ElementsAreArray; 1400... 1401 // ElementsAreArray accepts an array of element values. 1402 const int expected_vector1[] = {1, 5, 2, 4, ...}; 1403 EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1))); 1404 1405 // Or, an array of element matchers. 1406 Matcher<int> expected_vector2[] = {1, Gt(2), _, 3, ...}; 1407 EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2))); 1408``` 1409 1410In case the array needs to be dynamically created (and therefore the array size 1411cannot be inferred by the compiler), you can give `ElementsAreArray()` an 1412additional argument to specify the array size: 1413 1414```cpp 1415using ::testing::ElementsAreArray; 1416... 1417 int* const expected_vector3 = new int[count]; 1418 ... fill expected_vector3 with values ... 1419 EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count))); 1420``` 1421 1422Use `Pair` when comparing maps or other associative containers. 1423 1424{% raw %} 1425 1426```cpp 1427using ::testing::UnorderedElementsAre; 1428using ::testing::Pair; 1429... 1430 absl::flat_hash_map<string, int> m = {{"a", 1}, {"b", 2}, {"c", 3}}; 1431 EXPECT_THAT(m, UnorderedElementsAre( 1432 Pair("a", 1), Pair("b", 2), Pair("c", 3))); 1433``` 1434 1435{% endraw %} 1436 1437**Tips:** 1438 1439* `ElementsAre*()` can be used to match *any* container that implements the 1440 STL iterator pattern (i.e. it has a `const_iterator` type and supports 1441 `begin()/end()`), not just the ones defined in STL. It will even work with 1442 container types yet to be written - as long as they follows the above 1443 pattern. 1444* You can use nested `ElementsAre*()` to match nested (multi-dimensional) 1445 containers. 1446* If the container is passed by pointer instead of by reference, just write 1447 `Pointee(ElementsAre*(...))`. 1448* The order of elements *matters* for `ElementsAre*()`. If you are using it 1449 with containers whose element order are undefined (such as a 1450 `std::unordered_map`) you should use `UnorderedElementsAre`. 1451 1452### Sharing Matchers 1453 1454Under the hood, a gMock matcher object consists of a pointer to a ref-counted 1455implementation object. Copying matchers is allowed and very efficient, as only 1456the pointer is copied. When the last matcher that references the implementation 1457object dies, the implementation object will be deleted. 1458 1459Therefore, if you have some complex matcher that you want to use again and 1460again, there is no need to build it every time. Just assign it to a matcher 1461variable and use that variable repeatedly! For example, 1462 1463```cpp 1464using ::testing::AllOf; 1465using ::testing::Gt; 1466using ::testing::Le; 1467using ::testing::Matcher; 1468... 1469 Matcher<int> in_range = AllOf(Gt(5), Le(10)); 1470 ... use in_range as a matcher in multiple EXPECT_CALLs ... 1471``` 1472 1473### Matchers must have no side-effects {#PureMatchers} 1474 1475{: .callout .warning} 1476WARNING: gMock does not guarantee when or how many times a matcher will be 1477invoked. Therefore, all matchers must be *purely functional*: they cannot have 1478any side effects, and the match result must not depend on anything other than 1479the matcher's parameters and the value being matched. 1480 1481This requirement must be satisfied no matter how a matcher is defined (e.g., if 1482it is one of the standard matchers, or a custom matcher). In particular, a 1483matcher can never call a mock function, as that will affect the state of the 1484mock object and gMock. 1485 1486## Setting Expectations 1487 1488### Knowing When to Expect {#UseOnCall} 1489 1490**`ON_CALL`** is likely the *single most under-utilized construct* in gMock. 1491 1492There are basically two constructs for defining the behavior of a mock object: 1493`ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when 1494a mock method is called, but <em>doesn't imply any expectation on the method 1495being called</em>. `EXPECT_CALL` not only defines the behavior, but also sets an 1496expectation that <em>the method will be called with the given arguments, for the 1497given number of times</em> (and *in the given order* when you specify the order 1498too). 1499 1500Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every 1501`EXPECT_CALL` adds a constraint on the behavior of the code under test. Having 1502more constraints than necessary is *baaad* - even worse than not having enough 1503constraints. 1504 1505This may be counter-intuitive. How could tests that verify more be worse than 1506tests that verify less? Isn't verification the whole point of tests? 1507 1508The answer lies in *what* a test should verify. **A good test verifies the 1509contract of the code.** If a test over-specifies, it doesn't leave enough 1510freedom to the implementation. As a result, changing the implementation without 1511breaking the contract (e.g. refactoring and optimization), which should be 1512perfectly fine to do, can break such tests. Then you have to spend time fixing 1513them, only to see them broken again the next time the implementation is changed. 1514 1515Keep in mind that one doesn't have to verify more than one property in one test. 1516In fact, **it's a good style to verify only one thing in one test.** If you do 1517that, a bug will likely break only one or two tests instead of dozens (which 1518case would you rather debug?). If you are also in the habit of giving tests 1519descriptive names that tell what they verify, you can often easily guess what's 1520wrong just from the test log itself. 1521 1522So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend 1523to verify that the call is made. For example, you may have a bunch of `ON_CALL`s 1524in your test fixture to set the common mock behavior shared by all tests in the 1525same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s 1526to verify different aspects of the code's behavior. Compared with the style 1527where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more 1528resilient to implementational changes (and thus less likely to require 1529maintenance) and makes the intent of the tests more obvious (so they are easier 1530to maintain when you do need to maintain them). 1531 1532If you are bothered by the "Uninteresting mock function call" message printed 1533when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock` 1534instead to suppress all such messages for the mock object, or suppress the 1535message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO 1536NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test 1537that's a pain to maintain. 1538 1539### Ignoring Uninteresting Calls 1540 1541If you are not interested in how a mock method is called, just don't say 1542anything about it. In this case, if the method is ever called, gMock will 1543perform its default action to allow the test program to continue. If you are not 1544happy with the default action taken by gMock, you can override it using 1545`DefaultValue<T>::Set()` (described [here](#DefaultValue)) or `ON_CALL()`. 1546 1547Please note that once you expressed interest in a particular mock method (via 1548`EXPECT_CALL()`), all invocations to it must match some expectation. If this 1549function is called but the arguments don't match any `EXPECT_CALL()` statement, 1550it will be an error. 1551 1552### Disallowing Unexpected Calls 1553 1554If a mock method shouldn't be called at all, explicitly say so: 1555 1556```cpp 1557using ::testing::_; 1558... 1559 EXPECT_CALL(foo, Bar(_)) 1560 .Times(0); 1561``` 1562 1563If some calls to the method are allowed, but the rest are not, just list all the 1564expected calls: 1565 1566```cpp 1567using ::testing::AnyNumber; 1568using ::testing::Gt; 1569... 1570 EXPECT_CALL(foo, Bar(5)); 1571 EXPECT_CALL(foo, Bar(Gt(10))) 1572 .Times(AnyNumber()); 1573``` 1574 1575A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` statements 1576will be an error. 1577 1578### Understanding Uninteresting vs Unexpected Calls {#uninteresting-vs-unexpected} 1579 1580*Uninteresting* calls and *unexpected* calls are different concepts in gMock. 1581*Very* different. 1582 1583A call `x.Y(...)` is **uninteresting** if there's *not even a single* 1584`EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the 1585`x.Y()` method at all, as evident in that the test doesn't care to say anything 1586about it. 1587 1588A call `x.Y(...)` is **unexpected** if there are *some* `EXPECT_CALL(x, 1589Y(...))`s set, but none of them matches the call. Put another way, the test is 1590interested in the `x.Y()` method (therefore it explicitly sets some 1591`EXPECT_CALL` to verify how it's called); however, the verification fails as the 1592test doesn't expect this particular call to happen. 1593 1594**An unexpected call is always an error,** as the code under test doesn't behave 1595the way the test expects it to behave. 1596 1597**By default, an uninteresting call is not an error,** as it violates no 1598constraint specified by the test. (gMock's philosophy is that saying nothing 1599means there is no constraint.) However, it leads to a warning, as it *might* 1600indicate a problem (e.g. the test author might have forgotten to specify a 1601constraint). 1602 1603In gMock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or 1604"strict". How does this affect uninteresting calls and unexpected calls? 1605 1606A **nice mock** suppresses uninteresting call *warnings*. It is less chatty than 1607the default mock, but otherwise is the same. If a test fails with a default 1608mock, it will also fail using a nice mock instead. And vice versa. Don't expect 1609making a mock nice to change the test's result. 1610 1611A **strict mock** turns uninteresting call warnings into errors. So making a 1612mock strict may change the test's result. 1613 1614Let's look at an example: 1615 1616```cpp 1617TEST(...) { 1618 NiceMock<MockDomainRegistry> mock_registry; 1619 EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) 1620 .WillRepeatedly(Return("Larry Page")); 1621 1622 // Use mock_registry in code under test. 1623 ... &mock_registry ... 1624} 1625``` 1626 1627The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have 1628`"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it 1629will be an unexpected call, and thus an error. *Having a nice mock doesn't 1630change the severity of an unexpected call.* 1631 1632So how do we tell gMock that `GetDomainOwner()` can be called with some other 1633arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`: 1634 1635```cpp 1636 EXPECT_CALL(mock_registry, GetDomainOwner(_)) 1637 .Times(AnyNumber()); // catches all other calls to this method. 1638 EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) 1639 .WillRepeatedly(Return("Larry Page")); 1640``` 1641 1642Remember that `_` is the wildcard matcher that matches anything. With this, if 1643`GetDomainOwner("google.com")` is called, it will do what the second 1644`EXPECT_CALL` says; if it is called with a different argument, it will do what 1645the first `EXPECT_CALL` says. 1646 1647Note that the order of the two `EXPECT_CALL`s is important, as a newer 1648`EXPECT_CALL` takes precedence over an older one. 1649 1650For more on uninteresting calls, nice mocks, and strict mocks, read 1651["The Nice, the Strict, and the Naggy"](#NiceStrictNaggy). 1652 1653### Ignoring Uninteresting Arguments {#ParameterlessExpectations} 1654 1655If your test doesn't care about the parameters (it only cares about the number 1656or order of calls), you can often simply omit the parameter list: 1657 1658```cpp 1659 // Expect foo.Bar( ... ) twice with any arguments. 1660 EXPECT_CALL(foo, Bar).Times(2); 1661 1662 // Delegate to the given method whenever the factory is invoked. 1663 ON_CALL(foo_factory, MakeFoo) 1664 .WillByDefault(&BuildFooForTest); 1665``` 1666 1667This functionality is only available when a method is not overloaded; to prevent 1668unexpected behavior it is a compilation error to try to set an expectation on a 1669method where the specific overload is ambiguous. You can work around this by 1670supplying a [simpler mock interface](#SimplerInterfaces) than the mocked class 1671provides. 1672 1673This pattern is also useful when the arguments are interesting, but match logic 1674is substantially complex. You can leave the argument list unspecified and use 1675SaveArg actions to [save the values for later verification](#SaveArgVerify). If 1676you do that, you can easily differentiate calling the method the wrong number of 1677times from calling it with the wrong arguments. 1678 1679### Expecting Ordered Calls {#OrderedCalls} 1680 1681Although an `EXPECT_CALL()` statement defined later takes precedence when gMock 1682tries to match a function call with an expectation, by default calls don't have 1683to happen in the order `EXPECT_CALL()` statements are written. For example, if 1684the arguments match the matchers in the second `EXPECT_CALL()`, but not those in 1685the first and third, then the second expectation will be used. 1686 1687If you would rather have all calls occur in the order of the expectations, put 1688the `EXPECT_CALL()` statements in a block where you define a variable of type 1689`InSequence`: 1690 1691```cpp 1692using ::testing::_; 1693using ::testing::InSequence; 1694 1695 { 1696 InSequence s; 1697 1698 EXPECT_CALL(foo, DoThis(5)); 1699 EXPECT_CALL(bar, DoThat(_)) 1700 .Times(2); 1701 EXPECT_CALL(foo, DoThis(6)); 1702 } 1703``` 1704 1705In this example, we expect a call to `foo.DoThis(5)`, followed by two calls to 1706`bar.DoThat()` where the argument can be anything, which are in turn followed by 1707a call to `foo.DoThis(6)`. If a call occurred out-of-order, gMock will report an 1708error. 1709 1710### Expecting Partially Ordered Calls {#PartialOrder} 1711 1712Sometimes requiring everything to occur in a predetermined order can lead to 1713brittle tests. For example, we may care about `A` occurring before both `B` and 1714`C`, but aren't interested in the relative order of `B` and `C`. In this case, 1715the test should reflect our real intent, instead of being overly constraining. 1716 1717gMock allows you to impose an arbitrary DAG (directed acyclic graph) on the 1718calls. One way to express the DAG is to use the 1719[`After` clause](reference/mocking.md#EXPECT_CALL.After) of `EXPECT_CALL`. 1720 1721Another way is via the `InSequence()` clause (not the same as the `InSequence` 1722class), which we borrowed from jMock 2. It's less flexible than `After()`, but 1723more convenient when you have long chains of sequential calls, as it doesn't 1724require you to come up with different names for the expectations in the chains. 1725Here's how it works: 1726 1727If we view `EXPECT_CALL()` statements as nodes in a graph, and add an edge from 1728node A to node B wherever A must occur before B, we can get a DAG. We use the 1729term "sequence" to mean a directed path in this DAG. Now, if we decompose the 1730DAG into sequences, we just need to know which sequences each `EXPECT_CALL()` 1731belongs to in order to be able to reconstruct the original DAG. 1732 1733So, to specify the partial order on the expectations we need to do two things: 1734first to define some `Sequence` objects, and then for each `EXPECT_CALL()` say 1735which `Sequence` objects it is part of. 1736 1737Expectations in the same sequence must occur in the order they are written. For 1738example, 1739 1740```cpp 1741using ::testing::Sequence; 1742... 1743 Sequence s1, s2; 1744 1745 EXPECT_CALL(foo, A()) 1746 .InSequence(s1, s2); 1747 EXPECT_CALL(bar, B()) 1748 .InSequence(s1); 1749 EXPECT_CALL(bar, C()) 1750 .InSequence(s2); 1751 EXPECT_CALL(foo, D()) 1752 .InSequence(s2); 1753``` 1754 1755specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> C -> D`): 1756 1757```text 1758 +---> B 1759 | 1760 A ---| 1761 | 1762 +---> C ---> D 1763``` 1764 1765This means that A must occur before B and C, and C must occur before D. There's 1766no restriction about the order other than these. 1767 1768### Controlling When an Expectation Retires 1769 1770When a mock method is called, gMock only considers expectations that are still 1771active. An expectation is active when created, and becomes inactive (aka 1772*retires*) when a call that has to occur later has occurred. For example, in 1773 1774```cpp 1775using ::testing::_; 1776using ::testing::Sequence; 1777... 1778 Sequence s1, s2; 1779 1780 EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #1 1781 .Times(AnyNumber()) 1782 .InSequence(s1, s2); 1783 EXPECT_CALL(log, Log(WARNING, _, "Data set is empty.")) // #2 1784 .InSequence(s1); 1785 EXPECT_CALL(log, Log(WARNING, _, "User not found.")) // #3 1786 .InSequence(s2); 1787``` 1788 1789as soon as either #2 or #3 is matched, #1 will retire. If a warning `"File too 1790large."` is logged after this, it will be an error. 1791 1792Note that an expectation doesn't retire automatically when it's saturated. For 1793example, 1794 1795```cpp 1796using ::testing::_; 1797... 1798 EXPECT_CALL(log, Log(WARNING, _, _)); // #1 1799 EXPECT_CALL(log, Log(WARNING, _, "File too large.")); // #2 1800``` 1801 1802says that there will be exactly one warning with the message `"File too 1803large."`. If the second warning contains this message too, #2 will match again 1804and result in an upper-bound-violated error. 1805 1806If this is not what you want, you can ask an expectation to retire as soon as it 1807becomes saturated: 1808 1809```cpp 1810using ::testing::_; 1811... 1812 EXPECT_CALL(log, Log(WARNING, _, _)); // #1 1813 EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #2 1814 .RetiresOnSaturation(); 1815``` 1816 1817Here #2 can be used only once, so if you have two warnings with the message 1818`"File too large."`, the first will match #2 and the second will match #1 - 1819there will be no error. 1820 1821## Using Actions 1822 1823### Returning References from Mock Methods 1824 1825If a mock function's return type is a reference, you need to use `ReturnRef()` 1826instead of `Return()` to return a result: 1827 1828```cpp 1829using ::testing::ReturnRef; 1830 1831class MockFoo : public Foo { 1832 public: 1833 MOCK_METHOD(Bar&, GetBar, (), (override)); 1834}; 1835... 1836 MockFoo foo; 1837 Bar bar; 1838 EXPECT_CALL(foo, GetBar()) 1839 .WillOnce(ReturnRef(bar)); 1840... 1841``` 1842 1843### Returning Live Values from Mock Methods 1844 1845The `Return(x)` action saves a copy of `x` when the action is created, and 1846always returns the same value whenever it's executed. Sometimes you may want to 1847instead return the *live* value of `x` (i.e. its value at the time when the 1848action is *executed*.). Use either `ReturnRef()` or `ReturnPointee()` for this 1849purpose. 1850 1851If the mock function's return type is a reference, you can do it using 1852`ReturnRef(x)`, as shown in the previous recipe ("Returning References from Mock 1853Methods"). However, gMock doesn't let you use `ReturnRef()` in a mock function 1854whose return type is not a reference, as doing that usually indicates a user 1855error. So, what shall you do? 1856 1857Though you may be tempted, DO NOT use `std::ref()`: 1858 1859```cpp 1860using testing::Return; 1861 1862class MockFoo : public Foo { 1863 public: 1864 MOCK_METHOD(int, GetValue, (), (override)); 1865}; 1866... 1867 int x = 0; 1868 MockFoo foo; 1869 EXPECT_CALL(foo, GetValue()) 1870 .WillRepeatedly(Return(std::ref(x))); // Wrong! 1871 x = 42; 1872 EXPECT_EQ(42, foo.GetValue()); 1873``` 1874 1875Unfortunately, it doesn't work here. The above code will fail with error: 1876 1877```text 1878Value of: foo.GetValue() 1879 Actual: 0 1880Expected: 42 1881``` 1882 1883The reason is that `Return(*value*)` converts `value` to the actual return type 1884of the mock function at the time when the action is *created*, not when it is 1885*executed*. (This behavior was chosen for the action to be safe when `value` is 1886a proxy object that references some temporary objects.) As a result, 1887`std::ref(x)` is converted to an `int` value (instead of a `const int&`) when 1888the expectation is set, and `Return(std::ref(x))` will always return 0. 1889 1890`ReturnPointee(pointer)` was provided to solve this problem specifically. It 1891returns the value pointed to by `pointer` at the time the action is *executed*: 1892 1893```cpp 1894using testing::ReturnPointee; 1895... 1896 int x = 0; 1897 MockFoo foo; 1898 EXPECT_CALL(foo, GetValue()) 1899 .WillRepeatedly(ReturnPointee(&x)); // Note the & here. 1900 x = 42; 1901 EXPECT_EQ(42, foo.GetValue()); // This will succeed now. 1902``` 1903 1904### Combining Actions 1905 1906Want to do more than one thing when a function is called? That's fine. `DoAll()` 1907allows you to do a sequence of actions every time. Only the return value of the 1908last action in the sequence will be used. 1909 1910```cpp 1911using ::testing::_; 1912using ::testing::DoAll; 1913 1914class MockFoo : public Foo { 1915 public: 1916 MOCK_METHOD(bool, Bar, (int n), (override)); 1917}; 1918... 1919 EXPECT_CALL(foo, Bar(_)) 1920 .WillOnce(DoAll(action_1, 1921 action_2, 1922 ... 1923 action_n)); 1924``` 1925 1926### Verifying Complex Arguments {#SaveArgVerify} 1927 1928If you want to verify that a method is called with a particular argument but the 1929match criteria is complex, it can be difficult to distinguish between 1930cardinality failures (calling the method the wrong number of times) and argument 1931match failures. Similarly, if you are matching multiple parameters, it may not 1932be easy to distinguishing which argument failed to match. For example: 1933 1934```cpp 1935 // Not ideal: this could fail because of a problem with arg1 or arg2, or maybe 1936 // just the method wasn't called. 1937 EXPECT_CALL(foo, SendValues(_, ElementsAre(1, 4, 4, 7), EqualsProto( ... ))); 1938``` 1939 1940You can instead save the arguments and test them individually: 1941 1942```cpp 1943 EXPECT_CALL(foo, SendValues) 1944 .WillOnce(DoAll(SaveArg<1>(&actual_array), SaveArg<2>(&actual_proto))); 1945 ... run the test 1946 EXPECT_THAT(actual_array, ElementsAre(1, 4, 4, 7)); 1947 EXPECT_THAT(actual_proto, EqualsProto( ... )); 1948``` 1949 1950### Mocking Side Effects {#MockingSideEffects} 1951 1952Sometimes a method exhibits its effect not via returning a value but via side 1953effects. For example, it may change some global state or modify an output 1954argument. To mock side effects, in general you can define your own action by 1955implementing `::testing::ActionInterface`. 1956 1957If all you need to do is to change an output argument, the built-in 1958`SetArgPointee()` action is convenient: 1959 1960```cpp 1961using ::testing::_; 1962using ::testing::SetArgPointee; 1963 1964class MockMutator : public Mutator { 1965 public: 1966 MOCK_METHOD(void, Mutate, (bool mutate, int* value), (override)); 1967 ... 1968} 1969... 1970 MockMutator mutator; 1971 EXPECT_CALL(mutator, Mutate(true, _)) 1972 .WillOnce(SetArgPointee<1>(5)); 1973``` 1974 1975In this example, when `mutator.Mutate()` is called, we will assign 5 to the 1976`int` variable pointed to by argument #1 (0-based). 1977 1978`SetArgPointee()` conveniently makes an internal copy of the value you pass to 1979it, removing the need to keep the value in scope and alive. The implication 1980however is that the value must have a copy constructor and assignment operator. 1981 1982If the mock method also needs to return a value as well, you can chain 1983`SetArgPointee()` with `Return()` using `DoAll()`, remembering to put the 1984`Return()` statement last: 1985 1986```cpp 1987using ::testing::_; 1988using ::testing::DoAll; 1989using ::testing::Return; 1990using ::testing::SetArgPointee; 1991 1992class MockMutator : public Mutator { 1993 public: 1994 ... 1995 MOCK_METHOD(bool, MutateInt, (int* value), (override)); 1996} 1997... 1998 MockMutator mutator; 1999 EXPECT_CALL(mutator, MutateInt(_)) 2000 .WillOnce(DoAll(SetArgPointee<0>(5), 2001 Return(true))); 2002``` 2003 2004Note, however, that if you use the `ReturnOKWith()` method, it will override the 2005values provided by `SetArgPointee()` in the response parameters of your function 2006call. 2007 2008If the output argument is an array, use the `SetArrayArgument<N>(first, last)` 2009action instead. It copies the elements in source range `[first, last)` to the 2010array pointed to by the `N`-th (0-based) argument: 2011 2012```cpp 2013using ::testing::NotNull; 2014using ::testing::SetArrayArgument; 2015 2016class MockArrayMutator : public ArrayMutator { 2017 public: 2018 MOCK_METHOD(void, Mutate, (int* values, int num_values), (override)); 2019 ... 2020} 2021... 2022 MockArrayMutator mutator; 2023 int values[5] = {1, 2, 3, 4, 5}; 2024 EXPECT_CALL(mutator, Mutate(NotNull(), 5)) 2025 .WillOnce(SetArrayArgument<0>(values, values + 5)); 2026``` 2027 2028This also works when the argument is an output iterator: 2029 2030```cpp 2031using ::testing::_; 2032using ::testing::SetArrayArgument; 2033 2034class MockRolodex : public Rolodex { 2035 public: 2036 MOCK_METHOD(void, GetNames, (std::back_insert_iterator<vector<string>>), 2037 (override)); 2038 ... 2039} 2040... 2041 MockRolodex rolodex; 2042 vector<string> names = {"George", "John", "Thomas"}; 2043 EXPECT_CALL(rolodex, GetNames(_)) 2044 .WillOnce(SetArrayArgument<0>(names.begin(), names.end())); 2045``` 2046 2047### Changing a Mock Object's Behavior Based on the State 2048 2049If you expect a call to change the behavior of a mock object, you can use 2050`::testing::InSequence` to specify different behaviors before and after the 2051call: 2052 2053```cpp 2054using ::testing::InSequence; 2055using ::testing::Return; 2056 2057... 2058 { 2059 InSequence seq; 2060 EXPECT_CALL(my_mock, IsDirty()) 2061 .WillRepeatedly(Return(true)); 2062 EXPECT_CALL(my_mock, Flush()); 2063 EXPECT_CALL(my_mock, IsDirty()) 2064 .WillRepeatedly(Return(false)); 2065 } 2066 my_mock.FlushIfDirty(); 2067``` 2068 2069This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called 2070and return `false` afterwards. 2071 2072If the behavior change is more complex, you can store the effects in a variable 2073and make a mock method get its return value from that variable: 2074 2075```cpp 2076using ::testing::_; 2077using ::testing::SaveArg; 2078using ::testing::Return; 2079 2080ACTION_P(ReturnPointee, p) { return *p; } 2081... 2082 int previous_value = 0; 2083 EXPECT_CALL(my_mock, GetPrevValue) 2084 .WillRepeatedly(ReturnPointee(&previous_value)); 2085 EXPECT_CALL(my_mock, UpdateValue) 2086 .WillRepeatedly(SaveArg<0>(&previous_value)); 2087 my_mock.DoSomethingToUpdateValue(); 2088``` 2089 2090Here `my_mock.GetPrevValue()` will always return the argument of the last 2091`UpdateValue()` call. 2092 2093### Setting the Default Value for a Return Type {#DefaultValue} 2094 2095If a mock method's return type is a built-in C++ type or pointer, by default it 2096will return 0 when invoked. Also, in C++ 11 and above, a mock method whose 2097return type has a default constructor will return a default-constructed value by 2098default. You only need to specify an action if this default value doesn't work 2099for you. 2100 2101Sometimes, you may want to change this default value, or you may want to specify 2102a default value for types gMock doesn't know about. You can do this using the 2103`::testing::DefaultValue` class template: 2104 2105```cpp 2106using ::testing::DefaultValue; 2107 2108class MockFoo : public Foo { 2109 public: 2110 MOCK_METHOD(Bar, CalculateBar, (), (override)); 2111}; 2112 2113 2114... 2115 Bar default_bar; 2116 // Sets the default return value for type Bar. 2117 DefaultValue<Bar>::Set(default_bar); 2118 2119 MockFoo foo; 2120 2121 // We don't need to specify an action here, as the default 2122 // return value works for us. 2123 EXPECT_CALL(foo, CalculateBar()); 2124 2125 foo.CalculateBar(); // This should return default_bar. 2126 2127 // Unsets the default return value. 2128 DefaultValue<Bar>::Clear(); 2129``` 2130 2131Please note that changing the default value for a type can make your tests hard 2132to understand. We recommend you to use this feature judiciously. For example, 2133you may want to make sure the `Set()` and `Clear()` calls are right next to the 2134code that uses your mock. 2135 2136### Setting the Default Actions for a Mock Method 2137 2138You've learned how to change the default value of a given type. However, this 2139may be too coarse for your purpose: perhaps you have two mock methods with the 2140same return type and you want them to have different behaviors. The `ON_CALL()` 2141macro allows you to customize your mock's behavior at the method level: 2142 2143```cpp 2144using ::testing::_; 2145using ::testing::AnyNumber; 2146using ::testing::Gt; 2147using ::testing::Return; 2148... 2149 ON_CALL(foo, Sign(_)) 2150 .WillByDefault(Return(-1)); 2151 ON_CALL(foo, Sign(0)) 2152 .WillByDefault(Return(0)); 2153 ON_CALL(foo, Sign(Gt(0))) 2154 .WillByDefault(Return(1)); 2155 2156 EXPECT_CALL(foo, Sign(_)) 2157 .Times(AnyNumber()); 2158 2159 foo.Sign(5); // This should return 1. 2160 foo.Sign(-9); // This should return -1. 2161 foo.Sign(0); // This should return 0. 2162``` 2163 2164As you may have guessed, when there are more than one `ON_CALL()` statements, 2165the newer ones in the order take precedence over the older ones. In other words, 2166the **last** one that matches the function arguments will be used. This matching 2167order allows you to set up the common behavior in a mock object's constructor or 2168the test fixture's set-up phase and specialize the mock's behavior later. 2169 2170Note that both `ON_CALL` and `EXPECT_CALL` have the same "later statements take 2171precedence" rule, but they don't interact. That is, `EXPECT_CALL`s have their 2172own precedence order distinct from the `ON_CALL` precedence order. 2173 2174### Using Functions/Methods/Functors/Lambdas as Actions {#FunctionsAsActions} 2175 2176If the built-in actions don't suit you, you can use an existing callable 2177(function, `std::function`, method, functor, lambda) as an action. 2178 2179```cpp 2180using ::testing::_; using ::testing::Invoke; 2181 2182class MockFoo : public Foo { 2183 public: 2184 MOCK_METHOD(int, Sum, (int x, int y), (override)); 2185 MOCK_METHOD(bool, ComplexJob, (int x), (override)); 2186}; 2187 2188int CalculateSum(int x, int y) { return x + y; } 2189int Sum3(int x, int y, int z) { return x + y + z; } 2190 2191class Helper { 2192 public: 2193 bool ComplexJob(int x); 2194}; 2195 2196... 2197 MockFoo foo; 2198 Helper helper; 2199 EXPECT_CALL(foo, Sum(_, _)) 2200 .WillOnce(&CalculateSum) 2201 .WillRepeatedly(Invoke(NewPermanentCallback(Sum3, 1))); 2202 EXPECT_CALL(foo, ComplexJob(_)) 2203 .WillOnce(Invoke(&helper, &Helper::ComplexJob)) 2204 .WillOnce([] { return true; }) 2205 .WillRepeatedly([](int x) { return x > 0; }); 2206 2207 foo.Sum(5, 6); // Invokes CalculateSum(5, 6). 2208 foo.Sum(2, 3); // Invokes Sum3(1, 2, 3). 2209 foo.ComplexJob(10); // Invokes helper.ComplexJob(10). 2210 foo.ComplexJob(-1); // Invokes the inline lambda. 2211``` 2212 2213The only requirement is that the type of the function, etc must be *compatible* 2214with the signature of the mock function, meaning that the latter's arguments (if 2215it takes any) can be implicitly converted to the corresponding arguments of the 2216former, and the former's return type can be implicitly converted to that of the 2217latter. So, you can invoke something whose type is *not* exactly the same as the 2218mock function, as long as it's safe to do so - nice, huh? 2219 2220Note that: 2221 2222* The action takes ownership of the callback and will delete it when the 2223 action itself is destructed. 2224* If the type of a callback is derived from a base callback type `C`, you need 2225 to implicitly cast it to `C` to resolve the overloading, e.g. 2226 2227 ```cpp 2228 using ::testing::Invoke; 2229 ... 2230 ResultCallback<bool>* is_ok = ...; 2231 ... Invoke(is_ok) ...; // This works. 2232 2233 BlockingClosure* done = new BlockingClosure; 2234 ... Invoke(implicit_cast<Closure*>(done)) ...; // The cast is necessary. 2235 ``` 2236 2237### Using Functions with Extra Info as Actions 2238 2239The function or functor you call using `Invoke()` must have the same number of 2240arguments as the mock function you use it for. Sometimes you may have a function 2241that takes more arguments, and you are willing to pass in the extra arguments 2242yourself to fill the gap. You can do this in gMock using callbacks with 2243pre-bound arguments. Here's an example: 2244 2245```cpp 2246using ::testing::Invoke; 2247 2248class MockFoo : public Foo { 2249 public: 2250 MOCK_METHOD(char, DoThis, (int n), (override)); 2251}; 2252 2253char SignOfSum(int x, int y) { 2254 const int sum = x + y; 2255 return (sum > 0) ? '+' : (sum < 0) ? '-' : '0'; 2256} 2257 2258TEST_F(FooTest, Test) { 2259 MockFoo foo; 2260 2261 EXPECT_CALL(foo, DoThis(2)) 2262 .WillOnce(Invoke(NewPermanentCallback(SignOfSum, 5))); 2263 EXPECT_EQ('+', foo.DoThis(2)); // Invokes SignOfSum(5, 2). 2264} 2265``` 2266 2267### Invoking a Function/Method/Functor/Lambda/Callback Without Arguments 2268 2269`Invoke()` passes the mock function's arguments to the function, etc being 2270invoked such that the callee has the full context of the call to work with. If 2271the invoked function is not interested in some or all of the arguments, it can 2272simply ignore them. 2273 2274Yet, a common pattern is that a test author wants to invoke a function without 2275the arguments of the mock function. She could do that using a wrapper function 2276that throws away the arguments before invoking an underlining nullary function. 2277Needless to say, this can be tedious and obscures the intent of the test. 2278 2279There are two solutions to this problem. First, you can pass any callable of 2280zero args as an action. Alternatively, use `InvokeWithoutArgs()`, which is like 2281`Invoke()` except that it doesn't pass the mock function's arguments to the 2282callee. Here's an example of each: 2283 2284```cpp 2285using ::testing::_; 2286using ::testing::InvokeWithoutArgs; 2287 2288class MockFoo : public Foo { 2289 public: 2290 MOCK_METHOD(bool, ComplexJob, (int n), (override)); 2291}; 2292 2293bool Job1() { ... } 2294bool Job2(int n, char c) { ... } 2295 2296... 2297 MockFoo foo; 2298 EXPECT_CALL(foo, ComplexJob(_)) 2299 .WillOnce([] { Job1(); }); 2300 .WillOnce(InvokeWithoutArgs(NewPermanentCallback(Job2, 5, 'a'))); 2301 2302 foo.ComplexJob(10); // Invokes Job1(). 2303 foo.ComplexJob(20); // Invokes Job2(5, 'a'). 2304``` 2305 2306Note that: 2307 2308* The action takes ownership of the callback and will delete it when the 2309 action itself is destructed. 2310* If the type of a callback is derived from a base callback type `C`, you need 2311 to implicitly cast it to `C` to resolve the overloading, e.g. 2312 2313 ```cpp 2314 using ::testing::InvokeWithoutArgs; 2315 ... 2316 ResultCallback<bool>* is_ok = ...; 2317 ... InvokeWithoutArgs(is_ok) ...; // This works. 2318 2319 BlockingClosure* done = ...; 2320 ... InvokeWithoutArgs(implicit_cast<Closure*>(done)) ...; 2321 // The cast is necessary. 2322 ``` 2323 2324### Invoking an Argument of the Mock Function 2325 2326Sometimes a mock function will receive a function pointer, a functor (in other 2327words, a "callable") as an argument, e.g. 2328 2329```cpp 2330class MockFoo : public Foo { 2331 public: 2332 MOCK_METHOD(bool, DoThis, (int n, (ResultCallback1<bool, int>* callback)), 2333 (override)); 2334}; 2335``` 2336 2337and you may want to invoke this callable argument: 2338 2339```cpp 2340using ::testing::_; 2341... 2342 MockFoo foo; 2343 EXPECT_CALL(foo, DoThis(_, _)) 2344 .WillOnce(...); 2345 // Will execute callback->Run(5), where callback is the 2346 // second argument DoThis() receives. 2347``` 2348 2349{: .callout .note} 2350NOTE: The section below is legacy documentation from before C++ had lambdas: 2351 2352Arghh, you need to refer to a mock function argument but C++ has no lambda 2353(yet), so you have to define your own action. :-( Or do you really? 2354 2355Well, gMock has an action to solve *exactly* this problem: 2356 2357```cpp 2358InvokeArgument<N>(arg_1, arg_2, ..., arg_m) 2359``` 2360 2361will invoke the `N`-th (0-based) argument the mock function receives, with 2362`arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is a function 2363pointer, a functor, or a callback. gMock handles them all. 2364 2365With that, you could write: 2366 2367```cpp 2368using ::testing::_; 2369using ::testing::InvokeArgument; 2370... 2371 EXPECT_CALL(foo, DoThis(_, _)) 2372 .WillOnce(InvokeArgument<1>(5)); 2373 // Will execute callback->Run(5), where callback is the 2374 // second argument DoThis() receives. 2375``` 2376 2377What if the callable takes an argument by reference? No problem - just wrap it 2378inside `std::ref()`: 2379 2380```cpp 2381 ... 2382 MOCK_METHOD(bool, Bar, 2383 ((ResultCallback2<bool, int, const Helper&>* callback)), 2384 (override)); 2385 ... 2386 using ::testing::_; 2387 using ::testing::InvokeArgument; 2388 ... 2389 MockFoo foo; 2390 Helper helper; 2391 ... 2392 EXPECT_CALL(foo, Bar(_)) 2393 .WillOnce(InvokeArgument<0>(5, std::ref(helper))); 2394 // std::ref(helper) guarantees that a reference to helper, not a copy of 2395 // it, will be passed to the callback. 2396``` 2397 2398What if the callable takes an argument by reference and we do **not** wrap the 2399argument in `std::ref()`? Then `InvokeArgument()` will *make a copy* of the 2400argument, and pass a *reference to the copy*, instead of a reference to the 2401original value, to the callable. This is especially handy when the argument is a 2402temporary value: 2403 2404```cpp 2405 ... 2406 MOCK_METHOD(bool, DoThat, (bool (*f)(const double& x, const string& s)), 2407 (override)); 2408 ... 2409 using ::testing::_; 2410 using ::testing::InvokeArgument; 2411 ... 2412 MockFoo foo; 2413 ... 2414 EXPECT_CALL(foo, DoThat(_)) 2415 .WillOnce(InvokeArgument<0>(5.0, string("Hi"))); 2416 // Will execute (*f)(5.0, string("Hi")), where f is the function pointer 2417 // DoThat() receives. Note that the values 5.0 and string("Hi") are 2418 // temporary and dead once the EXPECT_CALL() statement finishes. Yet 2419 // it's fine to perform this action later, since a copy of the values 2420 // are kept inside the InvokeArgument action. 2421``` 2422 2423### Ignoring an Action's Result 2424 2425Sometimes you have an action that returns *something*, but you need an action 2426that returns `void` (perhaps you want to use it in a mock function that returns 2427`void`, or perhaps it needs to be used in `DoAll()` and it's not the last in the 2428list). `IgnoreResult()` lets you do that. For example: 2429 2430```cpp 2431using ::testing::_; 2432using ::testing::DoAll; 2433using ::testing::IgnoreResult; 2434using ::testing::Return; 2435 2436int Process(const MyData& data); 2437string DoSomething(); 2438 2439class MockFoo : public Foo { 2440 public: 2441 MOCK_METHOD(void, Abc, (const MyData& data), (override)); 2442 MOCK_METHOD(bool, Xyz, (), (override)); 2443}; 2444 2445 ... 2446 MockFoo foo; 2447 EXPECT_CALL(foo, Abc(_)) 2448 // .WillOnce(Invoke(Process)); 2449 // The above line won't compile as Process() returns int but Abc() needs 2450 // to return void. 2451 .WillOnce(IgnoreResult(Process)); 2452 EXPECT_CALL(foo, Xyz()) 2453 .WillOnce(DoAll(IgnoreResult(DoSomething), 2454 // Ignores the string DoSomething() returns. 2455 Return(true))); 2456``` 2457 2458Note that you **cannot** use `IgnoreResult()` on an action that already returns 2459`void`. Doing so will lead to ugly compiler errors. 2460 2461### Selecting an Action's Arguments {#SelectingArgs} 2462 2463Say you have a mock function `Foo()` that takes seven arguments, and you have a 2464custom action that you want to invoke when `Foo()` is called. Trouble is, the 2465custom action only wants three arguments: 2466 2467```cpp 2468using ::testing::_; 2469using ::testing::Invoke; 2470... 2471 MOCK_METHOD(bool, Foo, 2472 (bool visible, const string& name, int x, int y, 2473 (const map<pair<int, int>>), double& weight, double min_weight, 2474 double max_wight)); 2475... 2476bool IsVisibleInQuadrant1(bool visible, int x, int y) { 2477 return visible && x >= 0 && y >= 0; 2478} 2479... 2480 EXPECT_CALL(mock, Foo) 2481 .WillOnce(Invoke(IsVisibleInQuadrant1)); // Uh, won't compile. :-( 2482``` 2483 2484To please the compiler God, you need to define an "adaptor" that has the same 2485signature as `Foo()` and calls the custom action with the right arguments: 2486 2487```cpp 2488using ::testing::_; 2489using ::testing::Invoke; 2490... 2491bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y, 2492 const map<pair<int, int>, double>& weight, 2493 double min_weight, double max_wight) { 2494 return IsVisibleInQuadrant1(visible, x, y); 2495} 2496... 2497 EXPECT_CALL(mock, Foo) 2498 .WillOnce(Invoke(MyIsVisibleInQuadrant1)); // Now it works. 2499``` 2500 2501But isn't this awkward? 2502 2503gMock provides a generic *action adaptor*, so you can spend your time minding 2504more important business than writing your own adaptors. Here's the syntax: 2505 2506```cpp 2507WithArgs<N1, N2, ..., Nk>(action) 2508``` 2509 2510creates an action that passes the arguments of the mock function at the given 2511indices (0-based) to the inner `action` and performs it. Using `WithArgs`, our 2512original example can be written as: 2513 2514```cpp 2515using ::testing::_; 2516using ::testing::Invoke; 2517using ::testing::WithArgs; 2518... 2519 EXPECT_CALL(mock, Foo) 2520 .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1))); // No need to define your own adaptor. 2521``` 2522 2523For better readability, gMock also gives you: 2524 2525* `WithoutArgs(action)` when the inner `action` takes *no* argument, and 2526* `WithArg<N>(action)` (no `s` after `Arg`) when the inner `action` takes 2527 *one* argument. 2528 2529As you may have realized, `InvokeWithoutArgs(...)` is just syntactic sugar for 2530`WithoutArgs(Invoke(...))`. 2531 2532Here are more tips: 2533 2534* The inner action used in `WithArgs` and friends does not have to be 2535 `Invoke()` -- it can be anything. 2536* You can repeat an argument in the argument list if necessary, e.g. 2537 `WithArgs<2, 3, 3, 5>(...)`. 2538* You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`. 2539* The types of the selected arguments do *not* have to match the signature of 2540 the inner action exactly. It works as long as they can be implicitly 2541 converted to the corresponding arguments of the inner action. For example, 2542 if the 4-th argument of the mock function is an `int` and `my_action` takes 2543 a `double`, `WithArg<4>(my_action)` will work. 2544 2545### Ignoring Arguments in Action Functions 2546 2547The [selecting-an-action's-arguments](#SelectingArgs) recipe showed us one way 2548to make a mock function and an action with incompatible argument lists fit 2549together. The downside is that wrapping the action in `WithArgs<...>()` can get 2550tedious for people writing the tests. 2551 2552If you are defining a function (or method, functor, lambda, callback) to be used 2553with `Invoke*()`, and you are not interested in some of its arguments, an 2554alternative to `WithArgs` is to declare the uninteresting arguments as `Unused`. 2555This makes the definition less cluttered and less fragile in case the types of 2556the uninteresting arguments change. It could also increase the chance the action 2557function can be reused. For example, given 2558 2559```cpp 2560 public: 2561 MOCK_METHOD(double, Foo, double(const string& label, double x, double y), 2562 (override)); 2563 MOCK_METHOD(double, Bar, (int index, double x, double y), (override)); 2564``` 2565 2566instead of 2567 2568```cpp 2569using ::testing::_; 2570using ::testing::Invoke; 2571 2572double DistanceToOriginWithLabel(const string& label, double x, double y) { 2573 return sqrt(x*x + y*y); 2574} 2575double DistanceToOriginWithIndex(int index, double x, double y) { 2576 return sqrt(x*x + y*y); 2577} 2578... 2579 EXPECT_CALL(mock, Foo("abc", _, _)) 2580 .WillOnce(Invoke(DistanceToOriginWithLabel)); 2581 EXPECT_CALL(mock, Bar(5, _, _)) 2582 .WillOnce(Invoke(DistanceToOriginWithIndex)); 2583``` 2584 2585you could write 2586 2587```cpp 2588using ::testing::_; 2589using ::testing::Invoke; 2590using ::testing::Unused; 2591 2592double DistanceToOrigin(Unused, double x, double y) { 2593 return sqrt(x*x + y*y); 2594} 2595... 2596 EXPECT_CALL(mock, Foo("abc", _, _)) 2597 .WillOnce(Invoke(DistanceToOrigin)); 2598 EXPECT_CALL(mock, Bar(5, _, _)) 2599 .WillOnce(Invoke(DistanceToOrigin)); 2600``` 2601 2602### Sharing Actions 2603 2604Just like matchers, a gMock action object consists of a pointer to a ref-counted 2605implementation object. Therefore copying actions is also allowed and very 2606efficient. When the last action that references the implementation object dies, 2607the implementation object will be deleted. 2608 2609If you have some complex action that you want to use again and again, you may 2610not have to build it from scratch every time. If the action doesn't have an 2611internal state (i.e. if it always does the same thing no matter how many times 2612it has been called), you can assign it to an action variable and use that 2613variable repeatedly. For example: 2614 2615```cpp 2616using ::testing::Action; 2617using ::testing::DoAll; 2618using ::testing::Return; 2619using ::testing::SetArgPointee; 2620... 2621 Action<bool(int*)> set_flag = DoAll(SetArgPointee<0>(5), 2622 Return(true)); 2623 ... use set_flag in .WillOnce() and .WillRepeatedly() ... 2624``` 2625 2626However, if the action has its own state, you may be surprised if you share the 2627action object. Suppose you have an action factory `IncrementCounter(init)` which 2628creates an action that increments and returns a counter whose initial value is 2629`init`, using two actions created from the same expression and using a shared 2630action will exhibit different behaviors. Example: 2631 2632```cpp 2633 EXPECT_CALL(foo, DoThis()) 2634 .WillRepeatedly(IncrementCounter(0)); 2635 EXPECT_CALL(foo, DoThat()) 2636 .WillRepeatedly(IncrementCounter(0)); 2637 foo.DoThis(); // Returns 1. 2638 foo.DoThis(); // Returns 2. 2639 foo.DoThat(); // Returns 1 - Blah() uses a different 2640 // counter than Bar()'s. 2641``` 2642 2643versus 2644 2645```cpp 2646using ::testing::Action; 2647... 2648 Action<int()> increment = IncrementCounter(0); 2649 EXPECT_CALL(foo, DoThis()) 2650 .WillRepeatedly(increment); 2651 EXPECT_CALL(foo, DoThat()) 2652 .WillRepeatedly(increment); 2653 foo.DoThis(); // Returns 1. 2654 foo.DoThis(); // Returns 2. 2655 foo.DoThat(); // Returns 3 - the counter is shared. 2656``` 2657 2658### Testing Asynchronous Behavior 2659 2660One oft-encountered problem with gMock is that it can be hard to test 2661asynchronous behavior. Suppose you had a `EventQueue` class that you wanted to 2662test, and you created a separate `EventDispatcher` interface so that you could 2663easily mock it out. However, the implementation of the class fired all the 2664events on a background thread, which made test timings difficult. You could just 2665insert `sleep()` statements and hope for the best, but that makes your test 2666behavior nondeterministic. A better way is to use gMock actions and 2667`Notification` objects to force your asynchronous test to behave synchronously. 2668 2669```cpp 2670class MockEventDispatcher : public EventDispatcher { 2671 MOCK_METHOD(bool, DispatchEvent, (int32), (override)); 2672}; 2673 2674TEST(EventQueueTest, EnqueueEventTest) { 2675 MockEventDispatcher mock_event_dispatcher; 2676 EventQueue event_queue(&mock_event_dispatcher); 2677 2678 const int32 kEventId = 321; 2679 absl::Notification done; 2680 EXPECT_CALL(mock_event_dispatcher, DispatchEvent(kEventId)) 2681 .WillOnce([&done] { done.Notify(); }); 2682 2683 event_queue.EnqueueEvent(kEventId); 2684 done.WaitForNotification(); 2685} 2686``` 2687 2688In the example above, we set our normal gMock expectations, but then add an 2689additional action to notify the `Notification` object. Now we can just call 2690`Notification::WaitForNotification()` in the main thread to wait for the 2691asynchronous call to finish. After that, our test suite is complete and we can 2692safely exit. 2693 2694{: .callout .note} 2695Note: this example has a downside: namely, if the expectation is not satisfied, 2696our test will run forever. It will eventually time-out and fail, but it will 2697take longer and be slightly harder to debug. To alleviate this problem, you can 2698use `WaitForNotificationWithTimeout(ms)` instead of `WaitForNotification()`. 2699 2700## Misc Recipes on Using gMock 2701 2702### Mocking Methods That Use Move-Only Types 2703 2704C++11 introduced *move-only types*. A move-only-typed value can be moved from 2705one object to another, but cannot be copied. `std::unique_ptr<T>` is probably 2706the most commonly used move-only type. 2707 2708Mocking a method that takes and/or returns move-only types presents some 2709challenges, but nothing insurmountable. This recipe shows you how you can do it. 2710Note that the support for move-only method arguments was only introduced to 2711gMock in April 2017; in older code, you may find more complex 2712[workarounds](#LegacyMoveOnly) for lack of this feature. 2713 2714Let’s say we are working on a fictional project that lets one post and share 2715snippets called “buzzes”. Your code uses these types: 2716 2717```cpp 2718enum class AccessLevel { kInternal, kPublic }; 2719 2720class Buzz { 2721 public: 2722 explicit Buzz(AccessLevel access) { ... } 2723 ... 2724}; 2725 2726class Buzzer { 2727 public: 2728 virtual ~Buzzer() {} 2729 virtual std::unique_ptr<Buzz> MakeBuzz(StringPiece text) = 0; 2730 virtual bool ShareBuzz(std::unique_ptr<Buzz> buzz, int64_t timestamp) = 0; 2731 ... 2732}; 2733``` 2734 2735A `Buzz` object represents a snippet being posted. A class that implements the 2736`Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in 2737`Buzzer` may return a `unique_ptr<Buzz>` or take a `unique_ptr<Buzz>`. Now we 2738need to mock `Buzzer` in our tests. 2739 2740To mock a method that accepts or returns move-only types, you just use the 2741familiar `MOCK_METHOD` syntax as usual: 2742 2743```cpp 2744class MockBuzzer : public Buzzer { 2745 public: 2746 MOCK_METHOD(std::unique_ptr<Buzz>, MakeBuzz, (StringPiece text), (override)); 2747 MOCK_METHOD(bool, ShareBuzz, (std::unique_ptr<Buzz> buzz, int64_t timestamp), 2748 (override)); 2749}; 2750``` 2751 2752Now that we have the mock class defined, we can use it in tests. In the 2753following code examples, we assume that we have defined a `MockBuzzer` object 2754named `mock_buzzer_`: 2755 2756```cpp 2757 MockBuzzer mock_buzzer_; 2758``` 2759 2760First let’s see how we can set expectations on the `MakeBuzz()` method, which 2761returns a `unique_ptr<Buzz>`. 2762 2763As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or 2764`.WillRepeatedly()` clause), when that expectation fires, the default action for 2765that method will be taken. Since `unique_ptr<>` has a default constructor that 2766returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an 2767action: 2768 2769```cpp 2770 // Use the default action. 2771 EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")); 2772 2773 // Triggers the previous EXPECT_CALL. 2774 EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello")); 2775``` 2776 2777If you are not happy with the default action, you can tweak it as usual; see 2778[Setting Default Actions](#OnCall). 2779 2780If you just need to return a pre-defined move-only value, you can use the 2781`Return(ByMove(...))` action: 2782 2783```cpp 2784 // When this fires, the unique_ptr<> specified by ByMove(...) will 2785 // be returned. 2786 EXPECT_CALL(mock_buzzer_, MakeBuzz("world")) 2787 .WillOnce(Return(ByMove(std::make_unique<Buzz>(AccessLevel::kInternal)))); 2788 2789 EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world")); 2790``` 2791 2792Note that `ByMove()` is essential here - if you drop it, the code won’t compile. 2793 2794Quiz time! What do you think will happen if a `Return(ByMove(...))` action is 2795performed more than once (e.g. you write `... 2796.WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first time 2797the action runs, the source value will be consumed (since it’s a move-only 2798value), so the next time around, there’s no value to move from -- you’ll get a 2799run-time error that `Return(ByMove(...))` can only be run once. 2800 2801If you need your mock method to do more than just moving a pre-defined value, 2802remember that you can always use a lambda or a callable object, which can do 2803pretty much anything you want: 2804 2805```cpp 2806 EXPECT_CALL(mock_buzzer_, MakeBuzz("x")) 2807 .WillRepeatedly([](StringPiece text) { 2808 return std::make_unique<Buzz>(AccessLevel::kInternal); 2809 }); 2810 2811 EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); 2812 EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); 2813``` 2814 2815Every time this `EXPECT_CALL` fires, a new `unique_ptr<Buzz>` will be created 2816and returned. You cannot do this with `Return(ByMove(...))`. 2817 2818That covers returning move-only values; but how do we work with methods 2819accepting move-only arguments? The answer is that they work normally, although 2820some actions will not compile when any of method's arguments are move-only. You 2821can always use `Return`, or a [lambda or functor](#FunctionsAsActions): 2822 2823```cpp 2824 using ::testing::Unused; 2825 2826 EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)).WillOnce(Return(true)); 2827 EXPECT_TRUE(mock_buzzer_.ShareBuzz(std::make_unique<Buzz>(AccessLevel::kInternal)), 2828 0); 2829 2830 EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)).WillOnce( 2831 [](std::unique_ptr<Buzz> buzz, Unused) { return buzz != nullptr; }); 2832 EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0)); 2833``` 2834 2835Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...) 2836could in principle support move-only arguments, but the support for this is not 2837implemented yet. If this is blocking you, please file a bug. 2838 2839A few actions (e.g. `DoAll`) copy their arguments internally, so they can never 2840work with non-copyable objects; you'll have to use functors instead. 2841 2842#### Legacy workarounds for move-only types {#LegacyMoveOnly} 2843 2844Support for move-only function arguments was only introduced to gMock in April 2845of 2017. In older code, you may encounter the following workaround for the lack 2846of this feature (it is no longer necessary - we're including it just for 2847reference): 2848 2849```cpp 2850class MockBuzzer : public Buzzer { 2851 public: 2852 MOCK_METHOD(bool, DoShareBuzz, (Buzz* buzz, Time timestamp)); 2853 bool ShareBuzz(std::unique_ptr<Buzz> buzz, Time timestamp) override { 2854 return DoShareBuzz(buzz.get(), timestamp); 2855 } 2856}; 2857``` 2858 2859The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call 2860it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of 2861setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock 2862method: 2863 2864```cpp 2865 MockBuzzer mock_buzzer_; 2866 EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _)); 2867 2868 // When one calls ShareBuzz() on the MockBuzzer like this, the call is 2869 // forwarded to DoShareBuzz(), which is mocked. Therefore this statement 2870 // will trigger the above EXPECT_CALL. 2871 mock_buzzer_.ShareBuzz(std::make_unique<Buzz>(AccessLevel::kInternal), 0); 2872``` 2873 2874### Making the Compilation Faster 2875 2876Believe it or not, the *vast majority* of the time spent on compiling a mock 2877class is in generating its constructor and destructor, as they perform 2878non-trivial tasks (e.g. verification of the expectations). What's more, mock 2879methods with different signatures have different types and thus their 2880constructors/destructors need to be generated by the compiler separately. As a 2881result, if you mock many different types of methods, compiling your mock class 2882can get really slow. 2883 2884If you are experiencing slow compilation, you can move the definition of your 2885mock class' constructor and destructor out of the class body and into a `.cc` 2886file. This way, even if you `#include` your mock class in N files, the compiler 2887only needs to generate its constructor and destructor once, resulting in a much 2888faster compilation. 2889 2890Let's illustrate the idea using an example. Here's the definition of a mock 2891class before applying this recipe: 2892 2893```cpp 2894// File mock_foo.h. 2895... 2896class MockFoo : public Foo { 2897 public: 2898 // Since we don't declare the constructor or the destructor, 2899 // the compiler will generate them in every translation unit 2900 // where this mock class is used. 2901 2902 MOCK_METHOD(int, DoThis, (), (override)); 2903 MOCK_METHOD(bool, DoThat, (const char* str), (override)); 2904 ... more mock methods ... 2905}; 2906``` 2907 2908After the change, it would look like: 2909 2910```cpp 2911// File mock_foo.h. 2912... 2913class MockFoo : public Foo { 2914 public: 2915 // The constructor and destructor are declared, but not defined, here. 2916 MockFoo(); 2917 virtual ~MockFoo(); 2918 2919 MOCK_METHOD(int, DoThis, (), (override)); 2920 MOCK_METHOD(bool, DoThat, (const char* str), (override)); 2921 ... more mock methods ... 2922}; 2923``` 2924 2925and 2926 2927```cpp 2928// File mock_foo.cc. 2929#include "path/to/mock_foo.h" 2930 2931// The definitions may appear trivial, but the functions actually do a 2932// lot of things through the constructors/destructors of the member 2933// variables used to implement the mock methods. 2934MockFoo::MockFoo() {} 2935MockFoo::~MockFoo() {} 2936``` 2937 2938### Forcing a Verification 2939 2940When it's being destroyed, your friendly mock object will automatically verify 2941that all expectations on it have been satisfied, and will generate googletest 2942failures if not. This is convenient as it leaves you with one less thing to 2943worry about. That is, unless you are not sure if your mock object will be 2944destroyed. 2945 2946How could it be that your mock object won't eventually be destroyed? Well, it 2947might be created on the heap and owned by the code you are testing. Suppose 2948there's a bug in that code and it doesn't delete the mock object properly - you 2949could end up with a passing test when there's actually a bug. 2950 2951Using a heap checker is a good idea and can alleviate the concern, but its 2952implementation is not 100% reliable. So, sometimes you do want to *force* gMock 2953to verify a mock object before it is (hopefully) destructed. You can do this 2954with `Mock::VerifyAndClearExpectations(&mock_object)`: 2955 2956```cpp 2957TEST(MyServerTest, ProcessesRequest) { 2958 using ::testing::Mock; 2959 2960 MockFoo* const foo = new MockFoo; 2961 EXPECT_CALL(*foo, ...)...; 2962 // ... other expectations ... 2963 2964 // server now owns foo. 2965 MyServer server(foo); 2966 server.ProcessRequest(...); 2967 2968 // In case that server's destructor will forget to delete foo, 2969 // this will verify the expectations anyway. 2970 Mock::VerifyAndClearExpectations(foo); 2971} // server is destroyed when it goes out of scope here. 2972``` 2973 2974{: .callout .tip} 2975**Tip:** The `Mock::VerifyAndClearExpectations()` function returns a `bool` to 2976indicate whether the verification was successful (`true` for yes), so you can 2977wrap that function call inside a `ASSERT_TRUE()` if there is no point going 2978further when the verification has failed. 2979 2980Do not set new expectations after verifying and clearing a mock after its use. 2981Setting expectations after code that exercises the mock has undefined behavior. 2982See [Using Mocks in Tests](gmock_for_dummies.md#using-mocks-in-tests) for more 2983information. 2984 2985### Using Checkpoints {#UsingCheckPoints} 2986 2987Sometimes you might want to test a mock object's behavior in phases whose sizes 2988are each manageable, or you might want to set more detailed expectations about 2989which API calls invoke which mock functions. 2990 2991A technique you can use is to put the expectations in a sequence and insert 2992calls to a dummy "checkpoint" function at specific places. Then you can verify 2993that the mock function calls do happen at the right time. For example, if you 2994are exercising the code: 2995 2996```cpp 2997 Foo(1); 2998 Foo(2); 2999 Foo(3); 3000``` 3001 3002and want to verify that `Foo(1)` and `Foo(3)` both invoke `mock.Bar("a")`, but 3003`Foo(2)` doesn't invoke anything, you can write: 3004 3005```cpp 3006using ::testing::MockFunction; 3007 3008TEST(FooTest, InvokesBarCorrectly) { 3009 MyMock mock; 3010 // Class MockFunction<F> has exactly one mock method. It is named 3011 // Call() and has type F. 3012 MockFunction<void(string check_point_name)> check; 3013 { 3014 InSequence s; 3015 3016 EXPECT_CALL(mock, Bar("a")); 3017 EXPECT_CALL(check, Call("1")); 3018 EXPECT_CALL(check, Call("2")); 3019 EXPECT_CALL(mock, Bar("a")); 3020 } 3021 Foo(1); 3022 check.Call("1"); 3023 Foo(2); 3024 check.Call("2"); 3025 Foo(3); 3026} 3027``` 3028 3029The expectation spec says that the first `Bar("a")` call must happen before 3030checkpoint "1", the second `Bar("a")` call must happen after checkpoint "2", and 3031nothing should happen between the two checkpoints. The explicit checkpoints make 3032it clear which `Bar("a")` is called by which call to `Foo()`. 3033 3034### Mocking Destructors 3035 3036Sometimes you want to make sure a mock object is destructed at the right time, 3037e.g. after `bar->A()` is called but before `bar->B()` is called. We already know 3038that you can specify constraints on the [order](#OrderedCalls) of mock function 3039calls, so all we need to do is to mock the destructor of the mock function. 3040 3041This sounds simple, except for one problem: a destructor is a special function 3042with special syntax and special semantics, and the `MOCK_METHOD` macro doesn't 3043work for it: 3044 3045```cpp 3046MOCK_METHOD(void, ~MockFoo, ()); // Won't compile! 3047``` 3048 3049The good news is that you can use a simple pattern to achieve the same effect. 3050First, add a mock function `Die()` to your mock class and call it in the 3051destructor, like this: 3052 3053```cpp 3054class MockFoo : public Foo { 3055 ... 3056 // Add the following two lines to the mock class. 3057 MOCK_METHOD(void, Die, ()); 3058 ~MockFoo() override { Die(); } 3059}; 3060``` 3061 3062(If the name `Die()` clashes with an existing symbol, choose another name.) Now, 3063we have translated the problem of testing when a `MockFoo` object dies to 3064testing when its `Die()` method is called: 3065 3066```cpp 3067 MockFoo* foo = new MockFoo; 3068 MockBar* bar = new MockBar; 3069 ... 3070 { 3071 InSequence s; 3072 3073 // Expects *foo to die after bar->A() and before bar->B(). 3074 EXPECT_CALL(*bar, A()); 3075 EXPECT_CALL(*foo, Die()); 3076 EXPECT_CALL(*bar, B()); 3077 } 3078``` 3079 3080And that's that. 3081 3082### Using gMock and Threads {#UsingThreads} 3083 3084In a **unit** test, it's best if you could isolate and test a piece of code in a 3085single-threaded context. That avoids race conditions and dead locks, and makes 3086debugging your test much easier. 3087 3088Yet most programs are multi-threaded, and sometimes to test something we need to 3089pound on it from more than one thread. gMock works for this purpose too. 3090 3091Remember the steps for using a mock: 3092 30931. Create a mock object `foo`. 30942. Set its default actions and expectations using `ON_CALL()` and 3095 `EXPECT_CALL()`. 30963. The code under test calls methods of `foo`. 30974. Optionally, verify and reset the mock. 30985. Destroy the mock yourself, or let the code under test destroy it. The 3099 destructor will automatically verify it. 3100 3101If you follow the following simple rules, your mocks and threads can live 3102happily together: 3103 3104* Execute your *test code* (as opposed to the code being tested) in *one* 3105 thread. This makes your test easy to follow. 3106* Obviously, you can do step #1 without locking. 3107* When doing step #2 and #5, make sure no other thread is accessing `foo`. 3108 Obvious too, huh? 3109* #3 and #4 can be done either in one thread or in multiple threads - anyway 3110 you want. gMock takes care of the locking, so you don't have to do any - 3111 unless required by your test logic. 3112 3113If you violate the rules (for example, if you set expectations on a mock while 3114another thread is calling its methods), you get undefined behavior. That's not 3115fun, so don't do it. 3116 3117gMock guarantees that the action for a mock function is done in the same thread 3118that called the mock function. For example, in 3119 3120```cpp 3121 EXPECT_CALL(mock, Foo(1)) 3122 .WillOnce(action1); 3123 EXPECT_CALL(mock, Foo(2)) 3124 .WillOnce(action2); 3125``` 3126 3127if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, gMock will 3128execute `action1` in thread 1 and `action2` in thread 2. 3129 3130gMock does *not* impose a sequence on actions performed in different threads 3131(doing so may create deadlocks as the actions may need to cooperate). This means 3132that the execution of `action1` and `action2` in the above example *may* 3133interleave. If this is a problem, you should add proper synchronization logic to 3134`action1` and `action2` to make the test thread-safe. 3135 3136Also, remember that `DefaultValue<T>` is a global resource that potentially 3137affects *all* living mock objects in your program. Naturally, you won't want to 3138mess with it from multiple threads or when there still are mocks in action. 3139 3140### Controlling How Much Information gMock Prints 3141 3142When gMock sees something that has the potential of being an error (e.g. a mock 3143function with no expectation is called, a.k.a. an uninteresting call, which is 3144allowed but perhaps you forgot to explicitly ban the call), it prints some 3145warning messages, including the arguments of the function, the return value, and 3146the stack trace. Hopefully this will remind you to take a look and see if there 3147is indeed a problem. 3148 3149Sometimes you are confident that your tests are correct and may not appreciate 3150such friendly messages. Some other times, you are debugging your tests or 3151learning about the behavior of the code you are testing, and wish you could 3152observe every mock call that happens (including argument values, the return 3153value, and the stack trace). Clearly, one size doesn't fit all. 3154 3155You can control how much gMock tells you using the `--gmock_verbose=LEVEL` 3156command-line flag, where `LEVEL` is a string with three possible values: 3157 3158* `info`: gMock will print all informational messages, warnings, and errors 3159 (most verbose). At this setting, gMock will also log any calls to the 3160 `ON_CALL/EXPECT_CALL` macros. It will include a stack trace in 3161 "uninteresting call" warnings. 3162* `warning`: gMock will print both warnings and errors (less verbose); it will 3163 omit the stack traces in "uninteresting call" warnings. This is the default. 3164* `error`: gMock will print errors only (least verbose). 3165 3166Alternatively, you can adjust the value of that flag from within your tests like 3167so: 3168 3169```cpp 3170 ::testing::FLAGS_gmock_verbose = "error"; 3171``` 3172 3173If you find gMock printing too many stack frames with its informational or 3174warning messages, remember that you can control their amount with the 3175`--gtest_stack_trace_depth=max_depth` flag. 3176 3177Now, judiciously use the right flag to enable gMock serve you better! 3178 3179### Gaining Super Vision into Mock Calls 3180 3181You have a test using gMock. It fails: gMock tells you some expectations aren't 3182satisfied. However, you aren't sure why: Is there a typo somewhere in the 3183matchers? Did you mess up the order of the `EXPECT_CALL`s? Or is the code under 3184test doing something wrong? How can you find out the cause? 3185 3186Won't it be nice if you have X-ray vision and can actually see the trace of all 3187`EXPECT_CALL`s and mock method calls as they are made? For each call, would you 3188like to see its actual argument values and which `EXPECT_CALL` gMock thinks it 3189matches? If you still need some help to figure out who made these calls, how 3190about being able to see the complete stack trace at each mock call? 3191 3192You can unlock this power by running your test with the `--gmock_verbose=info` 3193flag. For example, given the test program: 3194 3195```cpp 3196#include "gmock/gmock.h" 3197 3198using testing::_; 3199using testing::HasSubstr; 3200using testing::Return; 3201 3202class MockFoo { 3203 public: 3204 MOCK_METHOD(void, F, (const string& x, const string& y)); 3205}; 3206 3207TEST(Foo, Bar) { 3208 MockFoo mock; 3209 EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return()); 3210 EXPECT_CALL(mock, F("a", "b")); 3211 EXPECT_CALL(mock, F("c", HasSubstr("d"))); 3212 3213 mock.F("a", "good"); 3214 mock.F("a", "b"); 3215} 3216``` 3217 3218if you run it with `--gmock_verbose=info`, you will see this output: 3219 3220```shell 3221[ RUN ] Foo.Bar 3222 3223foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked 3224Stack trace: ... 3225 3226foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked 3227Stack trace: ... 3228 3229foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked 3230Stack trace: ... 3231 3232foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))... 3233 Function call: F(@0x7fff7c8dad40"a",@0x7fff7c8dad10"good") 3234Stack trace: ... 3235 3236foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))... 3237 Function call: F(@0x7fff7c8dada0"a",@0x7fff7c8dad70"b") 3238Stack trace: ... 3239 3240foo_test.cc:16: Failure 3241Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))... 3242 Expected: to be called once 3243 Actual: never called - unsatisfied and active 3244[ FAILED ] Foo.Bar 3245``` 3246 3247Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo and 3248should actually be `"a"`. With the above message, you should see that the actual 3249`F("a", "good")` call is matched by the first `EXPECT_CALL`, not the third as 3250you thought. From that it should be obvious that the third `EXPECT_CALL` is 3251written wrong. Case solved. 3252 3253If you are interested in the mock call trace but not the stack traces, you can 3254combine `--gmock_verbose=info` with `--gtest_stack_trace_depth=0` on the test 3255command line. 3256 3257### Running Tests in Emacs 3258 3259If you build and run your tests in Emacs using the `M-x google-compile` command 3260(as many googletest users do), the source file locations of gMock and googletest 3261errors will be highlighted. Just press `<Enter>` on one of them and you'll be 3262taken to the offending line. Or, you can just type `C-x`` to jump to the next 3263error. 3264 3265To make it even easier, you can add the following lines to your `~/.emacs` file: 3266 3267```text 3268(global-set-key "\M-m" 'google-compile) ; m is for make 3269(global-set-key [M-down] 'next-error) 3270(global-set-key [M-up] '(lambda () (interactive) (next-error -1))) 3271``` 3272 3273Then you can type `M-m` to start a build (if you want to run the test as well, 3274just make sure `foo_test.run` or `runtests` is in the build command you supply 3275after typing `M-m`), or `M-up`/`M-down` to move back and forth between errors. 3276 3277## Extending gMock 3278 3279### Writing New Matchers Quickly {#NewMatchers} 3280 3281{: .callout .warning} 3282WARNING: gMock does not guarantee when or how many times a matcher will be 3283invoked. Therefore, all matchers must be functionally pure. See 3284[this section](#PureMatchers) for more details. 3285 3286The `MATCHER*` family of macros can be used to define custom matchers easily. 3287The syntax: 3288 3289```cpp 3290MATCHER(name, description_string_expression) { statements; } 3291``` 3292 3293will define a matcher with the given name that executes the statements, which 3294must return a `bool` to indicate if the match succeeds. Inside the statements, 3295you can refer to the value being matched by `arg`, and refer to its type by 3296`arg_type`. 3297 3298The *description string* is a `string`-typed expression that documents what the 3299matcher does, and is used to generate the failure message when the match fails. 3300It can (and should) reference the special `bool` variable `negation`, and should 3301evaluate to the description of the matcher when `negation` is `false`, or that 3302of the matcher's negation when `negation` is `true`. 3303 3304For convenience, we allow the description string to be empty (`""`), in which 3305case gMock will use the sequence of words in the matcher name as the 3306description. 3307 3308For example: 3309 3310```cpp 3311MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; } 3312``` 3313 3314allows you to write 3315 3316```cpp 3317 // Expects mock_foo.Bar(n) to be called where n is divisible by 7. 3318 EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7())); 3319``` 3320 3321or, 3322 3323```cpp 3324 using ::testing::Not; 3325 ... 3326 // Verifies that a value is divisible by 7 and the other is not. 3327 EXPECT_THAT(some_expression, IsDivisibleBy7()); 3328 EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7())); 3329``` 3330 3331If the above assertions fail, they will print something like: 3332 3333```shell 3334 Value of: some_expression 3335 Expected: is divisible by 7 3336 Actual: 27 3337 ... 3338 Value of: some_other_expression 3339 Expected: not (is divisible by 7) 3340 Actual: 21 3341``` 3342 3343where the descriptions `"is divisible by 7"` and `"not (is divisible by 7)"` are 3344automatically calculated from the matcher name `IsDivisibleBy7`. 3345 3346As you may have noticed, the auto-generated descriptions (especially those for 3347the negation) may not be so great. You can always override them with a `string` 3348expression of your own: 3349 3350```cpp 3351MATCHER(IsDivisibleBy7, 3352 absl::StrCat(negation ? "isn't" : "is", " divisible by 7")) { 3353 return (arg % 7) == 0; 3354} 3355``` 3356 3357Optionally, you can stream additional information to a hidden argument named 3358`result_listener` to explain the match result. For example, a better definition 3359of `IsDivisibleBy7` is: 3360 3361```cpp 3362MATCHER(IsDivisibleBy7, "") { 3363 if ((arg % 7) == 0) 3364 return true; 3365 3366 *result_listener << "the remainder is " << (arg % 7); 3367 return false; 3368} 3369``` 3370 3371With this definition, the above assertion will give a better message: 3372 3373```shell 3374 Value of: some_expression 3375 Expected: is divisible by 7 3376 Actual: 27 (the remainder is 6) 3377``` 3378 3379You should let `MatchAndExplain()` print *any additional information* that can 3380help a user understand the match result. Note that it should explain why the 3381match succeeds in case of a success (unless it's obvious) - this is useful when 3382the matcher is used inside `Not()`. There is no need to print the argument value 3383itself, as gMock already prints it for you. 3384 3385{: .callout .note} 3386NOTE: The type of the value being matched (`arg_type`) is determined by the 3387context in which you use the matcher and is supplied to you by the compiler, so 3388you don't need to worry about declaring it (nor can you). This allows the 3389matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match 3390any type where the value of `(arg % 7) == 0` can be implicitly converted to a 3391`bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an 3392`int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will 3393be `unsigned long`; and so on. 3394 3395### Writing New Parameterized Matchers Quickly 3396 3397Sometimes you'll want to define a matcher that has parameters. For that you can 3398use the macro: 3399 3400```cpp 3401MATCHER_P(name, param_name, description_string) { statements; } 3402``` 3403 3404where the description string can be either `""` or a `string` expression that 3405references `negation` and `param_name`. 3406 3407For example: 3408 3409```cpp 3410MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } 3411``` 3412 3413will allow you to write: 3414 3415```cpp 3416 EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); 3417``` 3418 3419which may lead to this message (assuming `n` is 10): 3420 3421```shell 3422 Value of: Blah("a") 3423 Expected: has absolute value 10 3424 Actual: -9 3425``` 3426 3427Note that both the matcher description and its parameter are printed, making the 3428message human-friendly. 3429 3430In the matcher definition body, you can write `foo_type` to reference the type 3431of a parameter named `foo`. For example, in the body of 3432`MATCHER_P(HasAbsoluteValue, value)` above, you can write `value_type` to refer 3433to the type of `value`. 3434 3435gMock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to `MATCHER_P10` to 3436support multi-parameter matchers: 3437 3438```cpp 3439MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; } 3440``` 3441 3442Please note that the custom description string is for a particular *instance* of 3443the matcher, where the parameters have been bound to actual values. Therefore 3444usually you'll want the parameter values to be part of the description. gMock 3445lets you do that by referencing the matcher parameters in the description string 3446expression. 3447 3448For example, 3449 3450```cpp 3451using ::testing::PrintToString; 3452MATCHER_P2(InClosedRange, low, hi, 3453 absl::StrFormat("%s in range [%s, %s]", negation ? "isn't" : "is", 3454 PrintToString(low), PrintToString(hi))) { 3455 return low <= arg && arg <= hi; 3456} 3457... 3458EXPECT_THAT(3, InClosedRange(4, 6)); 3459``` 3460 3461would generate a failure that contains the message: 3462 3463```shell 3464 Expected: is in range [4, 6] 3465``` 3466 3467If you specify `""` as the description, the failure message will contain the 3468sequence of words in the matcher name followed by the parameter values printed 3469as a tuple. For example, 3470 3471```cpp 3472 MATCHER_P2(InClosedRange, low, hi, "") { ... } 3473 ... 3474 EXPECT_THAT(3, InClosedRange(4, 6)); 3475``` 3476 3477would generate a failure that contains the text: 3478 3479```shell 3480 Expected: in closed range (4, 6) 3481``` 3482 3483For the purpose of typing, you can view 3484 3485```cpp 3486MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } 3487``` 3488 3489as shorthand for 3490 3491```cpp 3492template <typename p1_type, ..., typename pk_type> 3493FooMatcherPk<p1_type, ..., pk_type> 3494Foo(p1_type p1, ..., pk_type pk) { ... } 3495``` 3496 3497When you write `Foo(v1, ..., vk)`, the compiler infers the types of the 3498parameters `v1`, ..., and `vk` for you. If you are not happy with the result of 3499the type inference, you can specify the types by explicitly instantiating the 3500template, as in `Foo<long, bool>(5, false)`. As said earlier, you don't get to 3501(or need to) specify `arg_type` as that's determined by the context in which the 3502matcher is used. 3503 3504You can assign the result of expression `Foo(p1, ..., pk)` to a variable of type 3505`FooMatcherPk<p1_type, ..., pk_type>`. This can be useful when composing 3506matchers. Matchers that don't have a parameter or have only one parameter have 3507special types: you can assign `Foo()` to a `FooMatcher`-typed variable, and 3508assign `Foo(p)` to a `FooMatcherP<p_type>`-typed variable. 3509 3510While you can instantiate a matcher template with reference types, passing the 3511parameters by pointer usually makes your code more readable. If, however, you 3512still want to pass a parameter by reference, be aware that in the failure 3513message generated by the matcher you will see the value of the referenced object 3514but not its address. 3515 3516You can overload matchers with different numbers of parameters: 3517 3518```cpp 3519MATCHER_P(Blah, a, description_string_1) { ... } 3520MATCHER_P2(Blah, a, b, description_string_2) { ... } 3521``` 3522 3523While it's tempting to always use the `MATCHER*` macros when defining a new 3524matcher, you should also consider implementing the matcher interface directly 3525instead (see the recipes that follow), especially if you need to use the matcher 3526a lot. While these approaches require more work, they give you more control on 3527the types of the value being matched and the matcher parameters, which in 3528general leads to better compiler error messages that pay off in the long run. 3529They also allow overloading matchers based on parameter types (as opposed to 3530just based on the number of parameters). 3531 3532### Writing New Monomorphic Matchers 3533 3534A matcher of argument type `T` implements the matcher interface for `T` and does 3535two things: it tests whether a value of type `T` matches the matcher, and can 3536describe what kind of values it matches. The latter ability is used for 3537generating readable error messages when expectations are violated. 3538 3539A matcher of `T` must declare a typedef like: 3540 3541```cpp 3542using is_gtest_matcher = void; 3543``` 3544 3545and supports the following operations: 3546 3547```cpp 3548// Match a value and optionally explain into an ostream. 3549bool matched = matcher.MatchAndExplain(value, maybe_os); 3550// where `value` is of type `T` and 3551// `maybe_os` is of type `std::ostream*`, where it can be null if the caller 3552// is not interested in there textual explanation. 3553 3554matcher.DescribeTo(os); 3555matcher.DescribeNegationTo(os); 3556// where `os` is of type `std::ostream*`. 3557``` 3558 3559If you need a custom matcher but `Truly()` is not a good option (for example, 3560you may not be happy with the way `Truly(predicate)` describes itself, or you 3561may want your matcher to be polymorphic as `Eq(value)` is), you can define a 3562matcher to do whatever you want in two steps: first implement the matcher 3563interface, and then define a factory function to create a matcher instance. The 3564second step is not strictly needed but it makes the syntax of using the matcher 3565nicer. 3566 3567For example, you can define a matcher to test whether an `int` is divisible by 7 3568and then use it like this: 3569 3570```cpp 3571using ::testing::Matcher; 3572 3573class DivisibleBy7Matcher { 3574 public: 3575 using is_gtest_matcher = void; 3576 3577 bool MatchAndExplain(int n, std::ostream*) const { 3578 return (n % 7) == 0; 3579 } 3580 3581 void DescribeTo(std::ostream* os) const { 3582 *os << "is divisible by 7"; 3583 } 3584 3585 void DescribeNegationTo(std::ostream* os) const { 3586 *os << "is not divisible by 7"; 3587 } 3588}; 3589 3590Matcher<int> DivisibleBy7() { 3591 return DivisibleBy7Matcher(); 3592} 3593 3594... 3595 EXPECT_CALL(foo, Bar(DivisibleBy7())); 3596``` 3597 3598You may improve the matcher message by streaming additional information to the 3599`os` argument in `MatchAndExplain()`: 3600 3601```cpp 3602class DivisibleBy7Matcher { 3603 public: 3604 bool MatchAndExplain(int n, std::ostream* os) const { 3605 const int remainder = n % 7; 3606 if (remainder != 0 && os != nullptr) { 3607 *os << "the remainder is " << remainder; 3608 } 3609 return remainder == 0; 3610 } 3611 ... 3612}; 3613``` 3614 3615Then, `EXPECT_THAT(x, DivisibleBy7());` may generate a message like this: 3616 3617```shell 3618Value of: x 3619Expected: is divisible by 7 3620 Actual: 23 (the remainder is 2) 3621``` 3622 3623{: .callout .tip} 3624Tip: for convenience, `MatchAndExplain()` can take a `MatchResultListener*` 3625instead of `std::ostream*`. 3626 3627### Writing New Polymorphic Matchers 3628 3629Expanding what we learned above to *polymorphic* matchers is now just as simple 3630as adding templates in the right place. 3631 3632```cpp 3633 3634class NotNullMatcher { 3635 public: 3636 using is_gtest_matcher = void; 3637 3638 // To implement a polymorphic matcher, we just need to make MatchAndExplain a 3639 // template on its first argument. 3640 3641 // In this example, we want to use NotNull() with any pointer, so 3642 // MatchAndExplain() accepts a pointer of any type as its first argument. 3643 // In general, you can define MatchAndExplain() as an ordinary method or 3644 // a method template, or even overload it. 3645 template <typename T> 3646 bool MatchAndExplain(T* p, std::ostream*) const { 3647 return p != nullptr; 3648 } 3649 3650 // Describes the property of a value matching this matcher. 3651 void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } 3652 3653 // Describes the property of a value NOT matching this matcher. 3654 void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } 3655}; 3656 3657NotNullMatcher NotNull() { 3658 return NotNullMatcher(); 3659} 3660 3661... 3662 3663 EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. 3664``` 3665 3666### Legacy Matcher Implementation 3667 3668Defining matchers used to be somewhat more complicated, in which it required 3669several supporting classes and virtual functions. To implement a matcher for 3670type `T` using the legacy API you have to derive from `MatcherInterface<T>` and 3671call `MakeMatcher` to construct the object. 3672 3673The interface looks like this: 3674 3675```cpp 3676class MatchResultListener { 3677 public: 3678 ... 3679 // Streams x to the underlying ostream; does nothing if the ostream 3680 // is NULL. 3681 template <typename T> 3682 MatchResultListener& operator<<(const T& x); 3683 3684 // Returns the underlying ostream. 3685 std::ostream* stream(); 3686}; 3687 3688template <typename T> 3689class MatcherInterface { 3690 public: 3691 virtual ~MatcherInterface(); 3692 3693 // Returns true if and only if the matcher matches x; also explains the match 3694 // result to 'listener'. 3695 virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; 3696 3697 // Describes this matcher to an ostream. 3698 virtual void DescribeTo(std::ostream* os) const = 0; 3699 3700 // Describes the negation of this matcher to an ostream. 3701 virtual void DescribeNegationTo(std::ostream* os) const; 3702}; 3703``` 3704 3705Fortunately, most of the time you can define a polymorphic matcher easily with 3706the help of `MakePolymorphicMatcher()`. Here's how you can define `NotNull()` as 3707an example: 3708 3709```cpp 3710using ::testing::MakePolymorphicMatcher; 3711using ::testing::MatchResultListener; 3712using ::testing::PolymorphicMatcher; 3713 3714class NotNullMatcher { 3715 public: 3716 // To implement a polymorphic matcher, first define a COPYABLE class 3717 // that has three members MatchAndExplain(), DescribeTo(), and 3718 // DescribeNegationTo(), like the following. 3719 3720 // In this example, we want to use NotNull() with any pointer, so 3721 // MatchAndExplain() accepts a pointer of any type as its first argument. 3722 // In general, you can define MatchAndExplain() as an ordinary method or 3723 // a method template, or even overload it. 3724 template <typename T> 3725 bool MatchAndExplain(T* p, 3726 MatchResultListener* /* listener */) const { 3727 return p != NULL; 3728 } 3729 3730 // Describes the property of a value matching this matcher. 3731 void DescribeTo(std::ostream* os) const { *os << "is not NULL"; } 3732 3733 // Describes the property of a value NOT matching this matcher. 3734 void DescribeNegationTo(std::ostream* os) const { *os << "is NULL"; } 3735}; 3736 3737// To construct a polymorphic matcher, pass an instance of the class 3738// to MakePolymorphicMatcher(). Note the return type. 3739PolymorphicMatcher<NotNullMatcher> NotNull() { 3740 return MakePolymorphicMatcher(NotNullMatcher()); 3741} 3742 3743... 3744 3745 EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. 3746``` 3747 3748{: .callout .note} 3749**Note:** Your polymorphic matcher class does **not** need to inherit from 3750`MatcherInterface` or any other class, and its methods do **not** need to be 3751virtual. 3752 3753Like in a monomorphic matcher, you may explain the match result by streaming 3754additional information to the `listener` argument in `MatchAndExplain()`. 3755 3756### Writing New Cardinalities 3757 3758A cardinality is used in `Times()` to tell gMock how many times you expect a 3759call to occur. It doesn't have to be exact. For example, you can say 3760`AtLeast(5)` or `Between(2, 4)`. 3761 3762If the [built-in set](gmock_cheat_sheet.md#CardinalityList) of cardinalities 3763doesn't suit you, you are free to define your own by implementing the following 3764interface (in namespace `testing`): 3765 3766```cpp 3767class CardinalityInterface { 3768 public: 3769 virtual ~CardinalityInterface(); 3770 3771 // Returns true if and only if call_count calls will satisfy this cardinality. 3772 virtual bool IsSatisfiedByCallCount(int call_count) const = 0; 3773 3774 // Returns true if and only if call_count calls will saturate this 3775 // cardinality. 3776 virtual bool IsSaturatedByCallCount(int call_count) const = 0; 3777 3778 // Describes self to an ostream. 3779 virtual void DescribeTo(std::ostream* os) const = 0; 3780}; 3781``` 3782 3783For example, to specify that a call must occur even number of times, you can 3784write 3785 3786```cpp 3787using ::testing::Cardinality; 3788using ::testing::CardinalityInterface; 3789using ::testing::MakeCardinality; 3790 3791class EvenNumberCardinality : public CardinalityInterface { 3792 public: 3793 bool IsSatisfiedByCallCount(int call_count) const override { 3794 return (call_count % 2) == 0; 3795 } 3796 3797 bool IsSaturatedByCallCount(int call_count) const override { 3798 return false; 3799 } 3800 3801 void DescribeTo(std::ostream* os) const { 3802 *os << "called even number of times"; 3803 } 3804}; 3805 3806Cardinality EvenNumber() { 3807 return MakeCardinality(new EvenNumberCardinality); 3808} 3809 3810... 3811 EXPECT_CALL(foo, Bar(3)) 3812 .Times(EvenNumber()); 3813``` 3814 3815### Writing New Actions {#QuickNewActions} 3816 3817If the built-in actions don't work for you, you can easily define your own one. 3818All you need is a call operator with a signature compatible with the mocked 3819function. So you can use a lambda: 3820 3821``` 3822MockFunction<int(int)> mock; 3823EXPECT_CALL(mock, Call).WillOnce([](const int input) { return input * 7; }); 3824EXPECT_EQ(14, mock.AsStdFunction()(2)); 3825``` 3826 3827Or a struct with a call operator (even a templated one): 3828 3829``` 3830struct MultiplyBy { 3831 template <typename T> 3832 T operator()(T arg) { return arg * multiplier; } 3833 3834 int multiplier; 3835}; 3836 3837// Then use: 3838// EXPECT_CALL(...).WillOnce(MultiplyBy{7}); 3839``` 3840 3841It's also fine for the callable to take no arguments, ignoring the arguments 3842supplied to the mock function: 3843 3844``` 3845MockFunction<int(int)> mock; 3846EXPECT_CALL(mock, Call).WillOnce([] { return 17; }); 3847EXPECT_EQ(17, mock.AsStdFunction()(0)); 3848``` 3849 3850When used with `WillOnce`, the callable can assume it will be called at most 3851once and is allowed to be a move-only type: 3852 3853``` 3854// An action that contains move-only types and has an &&-qualified operator, 3855// demanding in the type system that it be called at most once. This can be 3856// used with WillOnce, but the compiler will reject it if handed to 3857// WillRepeatedly. 3858struct MoveOnlyAction { 3859 std::unique_ptr<int> move_only_state; 3860 std::unique_ptr<int> operator()() && { return std::move(move_only_state); } 3861}; 3862 3863MockFunction<std::unique_ptr<int>()> mock; 3864EXPECT_CALL(mock, Call).WillOnce(MoveOnlyAction{std::make_unique<int>(17)}); 3865EXPECT_THAT(mock.AsStdFunction()(), Pointee(Eq(17))); 3866``` 3867 3868More generally, to use with a mock function whose signature is `R(Args...)` the 3869object can be anything convertible to `OnceAction<R(Args...)>` or 3870`Action<R(Args...)`>. The difference between the two is that `OnceAction` has 3871weaker requirements (`Action` requires a copy-constructible input that can be 3872called repeatedly whereas `OnceAction` requires only move-constructible and 3873supports `&&`-qualified call operators), but can be used only with `WillOnce`. 3874`OnceAction` is typically relevant only when supporting move-only types or 3875actions that want a type-system guarantee that they will be called at most once. 3876 3877Typically the `OnceAction` and `Action` templates need not be referenced 3878directly in your actions: a struct or class with a call operator is sufficient, 3879as in the examples above. But fancier polymorphic actions that need to know the 3880specific return type of the mock function can define templated conversion 3881operators to make that possible. See `gmock-actions.h` for examples. 3882 3883#### Legacy macro-based Actions 3884 3885Before C++11, the functor-based actions were not supported; the old way of 3886writing actions was through a set of `ACTION*` macros. We suggest to avoid them 3887in new code; they hide a lot of logic behind the macro, potentially leading to 3888harder-to-understand compiler errors. Nevertheless, we cover them here for 3889completeness. 3890 3891By writing 3892 3893```cpp 3894ACTION(name) { statements; } 3895``` 3896 3897in a namespace scope (i.e. not inside a class or function), you will define an 3898action with the given name that executes the statements. The value returned by 3899`statements` will be used as the return value of the action. Inside the 3900statements, you can refer to the K-th (0-based) argument of the mock function as 3901`argK`. For example: 3902 3903```cpp 3904ACTION(IncrementArg1) { return ++(*arg1); } 3905``` 3906 3907allows you to write 3908 3909```cpp 3910... WillOnce(IncrementArg1()); 3911``` 3912 3913Note that you don't need to specify the types of the mock function arguments. 3914Rest assured that your code is type-safe though: you'll get a compiler error if 3915`*arg1` doesn't support the `++` operator, or if the type of `++(*arg1)` isn't 3916compatible with the mock function's return type. 3917 3918Another example: 3919 3920```cpp 3921ACTION(Foo) { 3922 (*arg2)(5); 3923 Blah(); 3924 *arg1 = 0; 3925 return arg0; 3926} 3927``` 3928 3929defines an action `Foo()` that invokes argument #2 (a function pointer) with 5, 3930calls function `Blah()`, sets the value pointed to by argument #1 to 0, and 3931returns argument #0. 3932 3933For more convenience and flexibility, you can also use the following pre-defined 3934symbols in the body of `ACTION`: 3935 3936`argK_type` | The type of the K-th (0-based) argument of the mock function 3937:-------------- | :----------------------------------------------------------- 3938`args` | All arguments of the mock function as a tuple 3939`args_type` | The type of all arguments of the mock function as a tuple 3940`return_type` | The return type of the mock function 3941`function_type` | The type of the mock function 3942 3943For example, when using an `ACTION` as a stub action for mock function: 3944 3945```cpp 3946int DoSomething(bool flag, int* ptr); 3947``` 3948 3949we have: 3950 3951Pre-defined Symbol | Is Bound To 3952------------------ | --------------------------------- 3953`arg0` | the value of `flag` 3954`arg0_type` | the type `bool` 3955`arg1` | the value of `ptr` 3956`arg1_type` | the type `int*` 3957`args` | the tuple `(flag, ptr)` 3958`args_type` | the type `std::tuple<bool, int*>` 3959`return_type` | the type `int` 3960`function_type` | the type `int(bool, int*)` 3961 3962#### Legacy macro-based parameterized Actions 3963 3964Sometimes you'll want to parameterize an action you define. For that we have 3965another macro 3966 3967```cpp 3968ACTION_P(name, param) { statements; } 3969``` 3970 3971For example, 3972 3973```cpp 3974ACTION_P(Add, n) { return arg0 + n; } 3975``` 3976 3977will allow you to write 3978 3979```cpp 3980// Returns argument #0 + 5. 3981... WillOnce(Add(5)); 3982``` 3983 3984For convenience, we use the term *arguments* for the values used to invoke the 3985mock function, and the term *parameters* for the values used to instantiate an 3986action. 3987 3988Note that you don't need to provide the type of the parameter either. Suppose 3989the parameter is named `param`, you can also use the gMock-defined symbol 3990`param_type` to refer to the type of the parameter as inferred by the compiler. 3991For example, in the body of `ACTION_P(Add, n)` above, you can write `n_type` for 3992the type of `n`. 3993 3994gMock also provides `ACTION_P2`, `ACTION_P3`, and etc to support multi-parameter 3995actions. For example, 3996 3997```cpp 3998ACTION_P2(ReturnDistanceTo, x, y) { 3999 double dx = arg0 - x; 4000 double dy = arg1 - y; 4001 return sqrt(dx*dx + dy*dy); 4002} 4003``` 4004 4005lets you write 4006 4007```cpp 4008... WillOnce(ReturnDistanceTo(5.0, 26.5)); 4009``` 4010 4011You can view `ACTION` as a degenerated parameterized action where the number of 4012parameters is 0. 4013 4014You can also easily define actions overloaded on the number of parameters: 4015 4016```cpp 4017ACTION_P(Plus, a) { ... } 4018ACTION_P2(Plus, a, b) { ... } 4019``` 4020 4021### Restricting the Type of an Argument or Parameter in an ACTION 4022 4023For maximum brevity and reusability, the `ACTION*` macros don't ask you to 4024provide the types of the mock function arguments and the action parameters. 4025Instead, we let the compiler infer the types for us. 4026 4027Sometimes, however, we may want to be more explicit about the types. There are 4028several tricks to do that. For example: 4029 4030```cpp 4031ACTION(Foo) { 4032 // Makes sure arg0 can be converted to int. 4033 int n = arg0; 4034 ... use n instead of arg0 here ... 4035} 4036 4037ACTION_P(Bar, param) { 4038 // Makes sure the type of arg1 is const char*. 4039 ::testing::StaticAssertTypeEq<const char*, arg1_type>(); 4040 4041 // Makes sure param can be converted to bool. 4042 bool flag = param; 4043} 4044``` 4045 4046where `StaticAssertTypeEq` is a compile-time assertion in googletest that 4047verifies two types are the same. 4048 4049### Writing New Action Templates Quickly 4050 4051Sometimes you want to give an action explicit template parameters that cannot be 4052inferred from its value parameters. `ACTION_TEMPLATE()` supports that and can be 4053viewed as an extension to `ACTION()` and `ACTION_P*()`. 4054 4055The syntax: 4056 4057```cpp 4058ACTION_TEMPLATE(ActionName, 4059 HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), 4060 AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } 4061``` 4062 4063defines an action template that takes *m* explicit template parameters and *n* 4064value parameters, where *m* is in [1, 10] and *n* is in [0, 10]. `name_i` is the 4065name of the *i*-th template parameter, and `kind_i` specifies whether it's a 4066`typename`, an integral constant, or a template. `p_i` is the name of the *i*-th 4067value parameter. 4068 4069Example: 4070 4071```cpp 4072// DuplicateArg<k, T>(output) converts the k-th argument of the mock 4073// function to type T and copies it to *output. 4074ACTION_TEMPLATE(DuplicateArg, 4075 // Note the comma between int and k: 4076 HAS_2_TEMPLATE_PARAMS(int, k, typename, T), 4077 AND_1_VALUE_PARAMS(output)) { 4078 *output = T(std::get<k>(args)); 4079} 4080``` 4081 4082To create an instance of an action template, write: 4083 4084```cpp 4085ActionName<t1, ..., t_m>(v1, ..., v_n) 4086``` 4087 4088where the `t`s are the template arguments and the `v`s are the value arguments. 4089The value argument types are inferred by the compiler. For example: 4090 4091```cpp 4092using ::testing::_; 4093... 4094 int n; 4095 EXPECT_CALL(mock, Foo).WillOnce(DuplicateArg<1, unsigned char>(&n)); 4096``` 4097 4098If you want to explicitly specify the value argument types, you can provide 4099additional template arguments: 4100 4101```cpp 4102ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n) 4103``` 4104 4105where `u_i` is the desired type of `v_i`. 4106 4107`ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the number of 4108value parameters, but not on the number of template parameters. Without the 4109restriction, the meaning of the following is unclear: 4110 4111```cpp 4112 OverloadedAction<int, bool>(x); 4113``` 4114 4115Are we using a single-template-parameter action where `bool` refers to the type 4116of `x`, or a two-template-parameter action where the compiler is asked to infer 4117the type of `x`? 4118 4119### Using the ACTION Object's Type 4120 4121If you are writing a function that returns an `ACTION` object, you'll need to 4122know its type. The type depends on the macro used to define the action and the 4123parameter types. The rule is relatively simple: 4124 4125 4126| Given Definition | Expression | Has Type | 4127| ----------------------------- | ------------------- | --------------------- | 4128| `ACTION(Foo)` | `Foo()` | `FooAction` | 4129| `ACTION_TEMPLATE(Foo, HAS_m_TEMPLATE_PARAMS(...), AND_0_VALUE_PARAMS())` | `Foo<t1, ..., t_m>()` | `FooAction<t1, ..., t_m>` | 4130| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP<int>` | 4131| `ACTION_TEMPLATE(Bar, HAS_m_TEMPLATE_PARAMS(...), AND_1_VALUE_PARAMS(p1))` | `Bar<t1, ..., t_m>(int_value)` | `BarActionP<t1, ..., t_m, int>` | 4132| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2<bool, int>` | 4133| `ACTION_TEMPLATE(Baz, HAS_m_TEMPLATE_PARAMS(...), AND_2_VALUE_PARAMS(p1, p2))` | `Baz<t1, ..., t_m>(bool_value, int_value)` | `BazActionP2<t1, ..., t_m, bool, int>` | 4134| ... | ... | ... | 4135 4136 4137Note that we have to pick different suffixes (`Action`, `ActionP`, `ActionP2`, 4138and etc) for actions with different numbers of value parameters, or the action 4139definitions cannot be overloaded on the number of them. 4140 4141### Writing New Monomorphic Actions {#NewMonoActions} 4142 4143While the `ACTION*` macros are very convenient, sometimes they are 4144inappropriate. For example, despite the tricks shown in the previous recipes, 4145they don't let you directly specify the types of the mock function arguments and 4146the action parameters, which in general leads to unoptimized compiler error 4147messages that can baffle unfamiliar users. They also don't allow overloading 4148actions based on parameter types without jumping through some hoops. 4149 4150An alternative to the `ACTION*` macros is to implement 4151`::testing::ActionInterface<F>`, where `F` is the type of the mock function in 4152which the action will be used. For example: 4153 4154```cpp 4155template <typename F> 4156class ActionInterface { 4157 public: 4158 virtual ~ActionInterface(); 4159 4160 // Performs the action. Result is the return type of function type 4161 // F, and ArgumentTuple is the tuple of arguments of F. 4162 // 4163 4164 // For example, if F is int(bool, const string&), then Result would 4165 // be int, and ArgumentTuple would be std::tuple<bool, const string&>. 4166 virtual Result Perform(const ArgumentTuple& args) = 0; 4167}; 4168``` 4169 4170```cpp 4171using ::testing::_; 4172using ::testing::Action; 4173using ::testing::ActionInterface; 4174using ::testing::MakeAction; 4175 4176typedef int IncrementMethod(int*); 4177 4178class IncrementArgumentAction : public ActionInterface<IncrementMethod> { 4179 public: 4180 int Perform(const std::tuple<int*>& args) override { 4181 int* p = std::get<0>(args); // Grabs the first argument. 4182 return *p++; 4183 } 4184}; 4185 4186Action<IncrementMethod> IncrementArgument() { 4187 return MakeAction(new IncrementArgumentAction); 4188} 4189 4190... 4191 EXPECT_CALL(foo, Baz(_)) 4192 .WillOnce(IncrementArgument()); 4193 4194 int n = 5; 4195 foo.Baz(&n); // Should return 5 and change n to 6. 4196``` 4197 4198### Writing New Polymorphic Actions {#NewPolyActions} 4199 4200The previous recipe showed you how to define your own action. This is all good, 4201except that you need to know the type of the function in which the action will 4202be used. Sometimes that can be a problem. For example, if you want to use the 4203action in functions with *different* types (e.g. like `Return()` and 4204`SetArgPointee()`). 4205 4206If an action can be used in several types of mock functions, we say it's 4207*polymorphic*. The `MakePolymorphicAction()` function template makes it easy to 4208define such an action: 4209 4210```cpp 4211namespace testing { 4212template <typename Impl> 4213PolymorphicAction<Impl> MakePolymorphicAction(const Impl& impl); 4214} // namespace testing 4215``` 4216 4217As an example, let's define an action that returns the second argument in the 4218mock function's argument list. The first step is to define an implementation 4219class: 4220 4221```cpp 4222class ReturnSecondArgumentAction { 4223 public: 4224 template <typename Result, typename ArgumentTuple> 4225 Result Perform(const ArgumentTuple& args) const { 4226 // To get the i-th (0-based) argument, use std::get(args). 4227 return std::get<1>(args); 4228 } 4229}; 4230``` 4231 4232This implementation class does *not* need to inherit from any particular class. 4233What matters is that it must have a `Perform()` method template. This method 4234template takes the mock function's arguments as a tuple in a **single** 4235argument, and returns the result of the action. It can be either `const` or not, 4236but must be invocable with exactly one template argument, which is the result 4237type. In other words, you must be able to call `Perform<R>(args)` where `R` is 4238the mock function's return type and `args` is its arguments in a tuple. 4239 4240Next, we use `MakePolymorphicAction()` to turn an instance of the implementation 4241class into the polymorphic action we need. It will be convenient to have a 4242wrapper for this: 4243 4244```cpp 4245using ::testing::MakePolymorphicAction; 4246using ::testing::PolymorphicAction; 4247 4248PolymorphicAction<ReturnSecondArgumentAction> ReturnSecondArgument() { 4249 return MakePolymorphicAction(ReturnSecondArgumentAction()); 4250} 4251``` 4252 4253Now, you can use this polymorphic action the same way you use the built-in ones: 4254 4255```cpp 4256using ::testing::_; 4257 4258class MockFoo : public Foo { 4259 public: 4260 MOCK_METHOD(int, DoThis, (bool flag, int n), (override)); 4261 MOCK_METHOD(string, DoThat, (int x, const char* str1, const char* str2), 4262 (override)); 4263}; 4264 4265 ... 4266 MockFoo foo; 4267 EXPECT_CALL(foo, DoThis).WillOnce(ReturnSecondArgument()); 4268 EXPECT_CALL(foo, DoThat).WillOnce(ReturnSecondArgument()); 4269 ... 4270 foo.DoThis(true, 5); // Will return 5. 4271 foo.DoThat(1, "Hi", "Bye"); // Will return "Hi". 4272``` 4273 4274### Teaching gMock How to Print Your Values 4275 4276When an uninteresting or unexpected call occurs, gMock prints the argument 4277values and the stack trace to help you debug. Assertion macros like 4278`EXPECT_THAT` and `EXPECT_EQ` also print the values in question when the 4279assertion fails. gMock and googletest do this using googletest's user-extensible 4280value printer. 4281 4282This printer knows how to print built-in C++ types, native arrays, STL 4283containers, and any type that supports the `<<` operator. For other types, it 4284prints the raw bytes in the value and hopes that you the user can figure it out. 4285[The GoogleTest advanced guide](advanced.md#teaching-googletest-how-to-print-your-values) 4286explains how to extend the printer to do a better job at printing your 4287particular type than to dump the bytes. 4288 4289## Useful Mocks Created Using gMock 4290 4291<!--#include file="includes/g3_testing_LOGs.md"--> 4292<!--#include file="includes/g3_mock_callbacks.md"--> 4293 4294### Mock std::function {#MockFunction} 4295 4296`std::function` is a general function type introduced in C++11. It is a 4297preferred way of passing callbacks to new interfaces. Functions are copiable, 4298and are not usually passed around by pointer, which makes them tricky to mock. 4299But fear not - `MockFunction` can help you with that. 4300 4301`MockFunction<R(T1, ..., Tn)>` has a mock method `Call()` with the signature: 4302 4303```cpp 4304 R Call(T1, ..., Tn); 4305``` 4306 4307It also has a `AsStdFunction()` method, which creates a `std::function` proxy 4308forwarding to Call: 4309 4310```cpp 4311 std::function<R(T1, ..., Tn)> AsStdFunction(); 4312``` 4313 4314To use `MockFunction`, first create `MockFunction` object and set up 4315expectations on its `Call` method. Then pass proxy obtained from 4316`AsStdFunction()` to the code you are testing. For example: 4317 4318```cpp 4319TEST(FooTest, RunsCallbackWithBarArgument) { 4320 // 1. Create a mock object. 4321 MockFunction<int(string)> mock_function; 4322 4323 // 2. Set expectations on Call() method. 4324 EXPECT_CALL(mock_function, Call("bar")).WillOnce(Return(1)); 4325 4326 // 3. Exercise code that uses std::function. 4327 Foo(mock_function.AsStdFunction()); 4328 // Foo's signature can be either of: 4329 // void Foo(const std::function<int(string)>& fun); 4330 // void Foo(std::function<int(string)> fun); 4331 4332 // 4. All expectations will be verified when mock_function 4333 // goes out of scope and is destroyed. 4334} 4335``` 4336 4337Remember that function objects created with `AsStdFunction()` are just 4338forwarders. If you create multiple of them, they will share the same set of 4339expectations. 4340 4341Although `std::function` supports unlimited number of arguments, `MockFunction` 4342implementation is limited to ten. If you ever hit that limit... well, your 4343callback has bigger problems than being mockable. :-) 4344